添加数字的新列

时间:2016-06-15 01:04:02

标签: linux awk

我正在编写以下代码,以便在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推荐的方法,我能够生成我想要的输出。非常感谢你!

2 个答案:

答案 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