代码之家  ›  专栏  ›  技术社区  ›  user2260984

如何使用shell脚本在特定列中附加/更新数据

  •  1
  • user2260984  · 技术社区  · 10 年前

    我有一个文件,其中包含近20列。 我需要更新第7列,其中我需要添加8个零

    例如:tmp.txt

    756 S#017925 5608 R88 X3GU0C LIC 200 00000000000 
    756 S#017925 5608 R88 M3GURA LIC 200 00000000000 
    

    第7列(粗体一列)我需要在它后面加8个零,即“00000000200”。

    预期输出:

      756 S#017925 5608 R88 X3GU0C LIC 00000000200 00000000000 
    

    我尝试使用awk命令

    awk -F' ' '{print "00000000"$7}' tmp.txt > tmp1.txt
    

    但它正在返回:

    00000000200
    00000000200
    
    1 回复  |  直到 10 年前
        1
  •  4
  •   Community Mr_and_Mrs_D    7 年前

    您可以直接执行以下操作:

    $ awk '{$7="0000000"$7}1' file
    756 S#017925 5608 R88 X3GU0C LIC 0000000200 00000000000
    756 S#017925 5608 R88 M3GURA LIC 0000000200 00000000000
    

    它以与您相同的方式设置第7个字段。然后,用 1 .


    如果您的号码 8 碰巧时间可变,使用起来很方便 printf 连同 %0XXi 使变量包含 XX 数字(将有 XX - length_number )前导数 0 s) 。要将值存储在变量中,我们使用 sprintf . Thanks to triplee for the idea !

    $ awk '{ $7 = sprintf("%011i", $7) } 1' file
    756 S#017925 5608 R88 X3GU0C LIC 00000000200 00000000000
    756 S#017925 5608 R88 M3GURA LIC 00000000200 00000000000
    

    你的尝试出了什么问题?

    awk -F' ' '{print "00000000"$7}' tmp.txt > tmp1.txt
    
    • print "00000000"$7 您正在打印第7个字段。使用 1. 让awk执行其默认操作: {print $0} ,这意味着它将打印整行。
    • 此外,无需使用 -F' ' ,因为它是默认值。