我正在编写以下代码,以便在for循环中使用awk从现有文件中提取数据。
for c in {1..300}
do
awk '{if($28==1) print $12,$26,$28}' file1.txt > file2.txt
done
这没关系,我有file2.txt 现在,我想添加一个包含从上面的for循环生成的c的新列。 我这样做但它不起作用。
awk '{if($28==1) print $12,$26,$28, paste c}' file1.txt > file2.txt
这只适用于我用实数来代替c,例如1,2,...... 最后,我想将file1.txt附加到file2.txt,即每次循环运行时,它都会向file2.txt添加新数据。 我有这个,但似乎不是最好的:
awk <file2.txt>> file_final.txt
你可以给我一些建议吗?谢谢!
PHUONG
使用William推荐的方法,我能够生成我想要的输出。非常感谢你!
答案 0 :(得分:1)
rm file2.txt
for c in $(seq 1 300); do
awk '$28==1{print $12,$26,$28,c}' c=$c file1.txt >> file2.txt
done
答案 1 :(得分:0)
您需要将shell变量c
传输到awk:
awk -v c="$c" '{if($28==1) print $12,$26,$28,c}' OFS=', ' file1.txt
-v c="$c"
创建一个名为c
的awk变量,该变量具有shell变量$c
的值。
使用虚假输入数据:
$ c=2; echo {1..28} | awk -v c="$c" '{if($28==1) print $12,$26,$28,c}' OFS=', ' file1.txt
12, 26, 1, 2
让我们从这个示例文件开始:
$ cat file1.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 1
现在,让我们在循环中运行awk命令并查看输出:
$ for c in {1..3}; do awk -v c="$c" '{if($28==1) print $12,$26,$28,c}' OFS=', ' file1.txt; done >file2.txt
$ cat file2.txt
12, 26, 1, 1
12, 26, 1, 2
12, 26, 1, 3