使用awk

时间:2017-08-29 06:24:41

标签: bash unix awk paste

我一直在努力解决这个问题(请注意我不是一个非常好的bash编码器,更不用说awk了)。 我有大约10000个文件,每个文件格式相同(非常重,大约3Mb)。我想获取每个文件的第3行并将它们并排粘贴到新文件中。

我发现许多使用paste,awk或cut的解决方案,但在使用通配符时,它们都没有工作。例如,

paste <(awk '{print $3}' file1 ) <(awk '{print $3}' file2 ) <(awk '{print $3}' file3) > output
如果我只有3个文件,那么

会很好用,但我不会为10000个文件输入。所以我尝试使用通配符:

paste <(awk '{print $3}' file* ) > output

它确实粘贴了第3行,但只是一行。我尝试了其他一些代码,但最终总会得到相同的结果。有没有办法使用通配符并排粘贴它们?

非常感谢你的帮助!

Baptiste G。

  

编辑1:在schorsch312的帮助下,我找到了一个有效的解决方案   为了我。而不是获取列并将它们并排粘贴,   我将每列打印为一行,然后依次添加:

     

for ls files*;做          awk'{printf $ 3i“”} END {print}'$ i&gt;&gt;输出完成

     

它有效,但1 /它很慢,2 /它不完全是我问的   在标题中,因为我的输出文件是“转置”。它并不是真的   对我来说很重要,因为它只是漂浮物,我可以稍后转置它   如果需要,可以使用python。

1 个答案:

答案 0 :(得分:0)

我知道你单独说awk,但我不知道怎么做。这是一个简单的bash脚本,可以执行您喜欢的操作。

# do a loop over all your files 
for i in `ls file*`; do 
    # use awk to get the 3rd row for all files and save output
    awk '{print $3}' $i > row_$i  
done

# now paste your rows together.
paste row_* > output

# cleanup
rm row_*