我有 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 == 1
,NR > 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