LINUX awk循环遍历txt文件的几行

时间:2015-04-27 10:57:17

标签: linux loops awk

我需要遍历文本文件的多行并重定向到另一个文本文件。

我设法做了以下事情:

for i in $(seq 1 24)
awk 'NR==1 {print $4 $5 $6}'  3dfwhmx.txt > values.txt
values='cat*values.txt'
3dClust -fwhmxyz ${values}
done

但是,这仅针对first row4,5,6th column。我需要使用i索引才能解决1st, 2nd, 3rd etc row问题。 我需要为i的每次迭代创建一个值向量。

我尝试了几件事,例如;

awk 'NR=='$i'  {print $4 $5 $6}'  3dfwhmx.txt > values.txt

但它不起作用。我真的很感激任何反馈!

2 个答案:

答案 0 :(得分:1)

你需要遍历它并为每一行调用awk吗?

为什么不

awk '{print $4}'  3dfwhmx.txt > values.txt

或更改您的引号以允许shell替换

awk "NR==$i {print $4}"  3dfwhmx.txt > values.txt

答案 1 :(得分:0)

您不需要围绕awk循环。

awk 'NR<=24{print $4}'  3dfwhmx.txt > values.txt

将为您提供前24行作为循环逻辑。

使用更新的问题,您也不需要临时文件。

for i in $(seq 1 24); do
   values=$(awk -v i=$i 'NR==i {print $4 $5 $6}'  3dfwhmx.txt)
   3dClust -fwhmxyz ${values}
done

根据3dClust的工作原理,您可以使用管道简单地将`awk&#39输出重定向到其标准输入。