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

时间:2014-08-20 11:14:22

标签: shell awk aix

我有一个文件,其中包含近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 个答案:

答案 0 :(得分:4)

您可以直接执行此操作:

$ 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的数量。要将值存储在变量中,我们使用sprintfThanks 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' ',因为它是默认值。