将列添加到制表符分隔文件的中间(sed/awk/whatever)

Cha*_*ley 6 awk sed

我正在尝试将一个列(内容为"0")添加到预先存在的制表符分隔文本文件的中间.我想sedawk将会做我想做的事.我已经在网上看过各种各样的解决方案,但这些解决方案的解释不够简单!

我目前有这样的内容:

Affx-11749850   1       555296  CC
Run Code Online (Sandbox Code Playgroud)

我需要这个内容

Affx-11749850   1   0   555296  CC
Run Code Online (Sandbox Code Playgroud)

使用命令awk '{$3=0}1'filename会弄乱我的格式化并用0替换第3列,而不是添加第3列的0.

任何帮助(有解释!)所以我可以解决这个问题,以及未来类似的问题,非常感谢.

Tho*_*hor 10

使用隐式{ print }规则并将其附加0到第二列:

awk '$2 = $2 FS "0"' file
Run Code Online (Sandbox Code Playgroud)

或者sed,假设单个空格分隔符:

sed 's/ / 0 /2' file
Run Code Online (Sandbox Code Playgroud)

或者perl:

perl -lane '$, = " "; $F[1] .= " 0"; print @F'
Run Code Online (Sandbox Code Playgroud)

  • AWK的一个非常相似的选项会将分隔符留给AWK,这将是'awk'{$ 5 = $ 4; $ 4 = $ 3; $ 3 = 0} 1'.我更喜欢这个因为这个原因 (2认同)
  • 如果文件是制表符分隔符,请告诉`awk`:`awk -F'\ t''$ 2 = $ 2 FS"0"'file`按预期工作. (2认同)