将多个文件的最后一行复制到一个文件中

时间:2012-07-12 17:48:09

标签: shell unix tail

我在目录中有许多文件。我想浏览目录,并将每个文件的最后一行放入一个新文件中。 IE,这个新文件应该包含目录中每个文件的最后一行。我尝试使用

tail -n 1 | cat > newfile.txt

但是在每行之间插入了源文件名。我也尝试编写一个shell脚本,但它唯一成功的做法是创建目标文件,然后无限期地运行而无需添加数据。这样做的正确方法是什么?任何帮助深表感谢。

3 个答案:

答案 0 :(得分:3)

使用find

find . -type f -exec tail -n1 {} >> newfile.txt \;

或者如果您不想遍历子目录:

find . -depth 1 -type f -exec tail -n1 {} >> newfile.txt \;

答案 1 :(得分:2)

至少coreutils tail有一个-q标记,不会输出标题,所以很简单:

tail -q -n1 * > OUTFILE

会工作。

答案 2 :(得分:2)

find有效,但如果你在sh / bash / ksh / zsh中,for循环也可以。

for filename in *; do
    tail -n 1 "$filename" >> /path/to/newfile.txt
done

请注意,如果newfile.txt与您在*上运行for循环的目录位于同一目录,则可能会产生奇怪的结果。