我一直在努力解决这个问题(请注意我不是一个非常好的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。
答案 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_*