bash:如何将分配的值添加到文件

bash:如何将分配的值添加到文件

我有 bash 脚本循环遍历目录中的多个文件。文件标识符已保存为变量$num。我想做的是$num在我的数据中添加另一列,如下例所示:

原始输入:

A B C D E
2 79 56 SD L
1 09 67 JK S
9 60 37 KD G
0 10 47 SO E

预期输出:

A B C D E id
2 79 56 SD L 1
1 09 67 JK S 1
9 60 37 KD G 1
0 10 47 SO E 1

*在上面的例子中,$num= 1

最终,我想从每个循环文件​​中获取行的子集,并将它们放入一个大文件中。为了让我知道该行来自哪个文件,我需要来自 的 id $num

我尝试过使用awk '{$12 = $num}' filename但这根本不起作用。

请帮忙!

答案1

尝试(awk 可以在一行中)

 id=...
 awk -v id=$id 'NR==1 { x=NF+1 ; $x = "id" ; print ; }
                NR > 1 { x=NF+1 ; $x = id ; print ; } ' file > new_file

在哪里

  • -v id=$id 将 id 从 shell 粘贴到 awk,如果 id 有有趣的字符,请使用-v id="îd"
  • NR == 1NR > 1选择第一行,其他行
  • { x=NF+1 ; $x = id ; print ; }推送 $id (awk 中的 id )

答案2

以下sed脚本假定字段分隔符是空格。如果是制表符,请将两个s///sed 命令中的空格更改为\t

第一行已id附加,第二行及后续行已$num附加。

$ num=1
$ sed -e "1 s/$/ id/ ; 2,$ s/$/ $num/" input.txt 
A B C D E id
2 79 56 SD L 1
1 09 67 JK S 1
9 60 37 KD G 1
0 10 47 SO E 1

相关内容