Linux:在文件之间带有分隔符的猫


28

在Linux中,如果键入cat *,将得到以下内容:

LINE1从文件1
从文件1第2行
第1行从file2的
LINE1从file3的
第2行从file3的
从file3的line3中

我想在文件之间显示一个分隔符。事情是这样的:
一号线从文件1
,从2号线的file1
XXXXXXXXXXXX
一号线从文件2
XXXXXXXXXXXX
一号线从file3的
2号线从文件3
从文件3 3号线

用内胆轻松打字就可以轻松做到这一点吗?

Answers:


40

如果您对分隔符的外观不太挑剔:

tail -n +1 *

这很棒!我很惊讶您的命令与tail -n 1 *有何不同。在手册页中,我找不到任何提及+1(比1多的效果)的信息。
Daniele

1
tail -n X显示最后的X行。tail -n +X从X线开始,从1开始,即它显示了除第一(X-1)行外的所有行。
吉尔(Gilles)“所以,别再邪恶了”,2010年

啊,现在我可以在手册页中看到它。我忽略了它。太好了,非常感谢
Daniele

本文中提供了类似的解决方案:everythingsysadmin.com/2012/09/unorthodoxunix.html
TomOnTime 2014年

对不起,我的评论不好,但这太棒了。谢谢@Gilles
Mike D


11
awk 'FNR==1 && NR!=1 {print "XXXXXXXXXXXX"}{print}' *

要么

awk 'FNR==1 {print "XXXXXX", FILENAME, "XXXXXX"}{print}' *

要么

awk 'FNR==1 {print "XXXXXX File no. " ++count, "XXXXXX"}{print}' *

仅使用Bash(否cat):

for file in *; do printf "$(<"$file")\nXXXXXXXXXXXX\n"; done

编辑:

在AWK 4中:

awk 'BEGINFILE {print "XXXXXXXXXXXX"}{print}' *

您可以使用任何分隔符,例如此答案中其他示例中的分隔符。如果要将分隔符放在每个文件的末尾,请更改BEGINFILEENDFILE。由于它是有条件的(而不是暗示执行顺序),因此它仍可以出现在脚本的开头。


2
+1!我发誓它可以做任何事情……
brad 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.