2016-07-07 35 views
0

我无法找到使用awk命令打印文本文件的特定列的方法。
我有一个FOR循环中的awk命令,它循环了大量的目录,并且在每个循环中,我使用awk命令从包含大量列的文本文件中打印两列。我需要的第一列在每个循环过程中都保持不变,所以我可以使用$ 1而没有问题。当我需要打印第二栏时出现问题。
我想通过awk打印的第二列通过for循环更改每次迭代。到目前为止,我试图做的是bash中的awk命令是否允许使用包含数值的变量来调用特定的列?

#Simplified Example 

count=1 # the counter starts at 1 because I will not be needing col 1 

for i in $list; do 

    count=count+1 

    awk '{print $1 "\t" ${count}}' $file > ex_files.txt 

done 

希望我在这里写的是有道理的。我查看了可能的其他帮助页面,以查找我的错误语法,但到目前为止还没有成功。大多数例子中,我已经看到awk的变量,它不是一个动态变量,所以我有点卡住了。
如果有更好的命令去做我试图做的事情,而不是“awk”,我对此表示欢迎。请让我知道如果你需要进一步澄清

回答

0

我感到愚蠢,因为我花了很多时间昨晚寻找问题的答案,10分钟今早看后,我终于通过这个网站找到了答案

http://www.grymoire.com/Unix/Awk.html#uh-4

在动态变量部分

,我看到,如果我改变了这个关于AWK线

AWK的语法 '{打印$ 1 “\ t” 的$' $计数 '}' $文件> ex_files.txt

它解决了问题。这样,它在第N次迭代之后从$文件中拉出第N(+1)列。

+0

而不是直接嵌入变量,我建议使用'-v'来传递变量:'awk -vc =“$ {count}”'{print $ 1“\ t”$ count}“' –

+0

i尝试使用你的建议,但它并没有很好的工作。再一次,我不打算以任何方式成为bash wiz,但是你的意思是:'awk -v cnt =“$ {count}”'{print $ 1'\ t“$ cnt}''? – Jon