![如何获得合并文本的空行?](https://linux22.com/image/892900/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%BE%97%E5%90%88%E5%B9%B6%E6%96%87%E6%9C%AC%E7%9A%84%E7%A9%BA%E8%A1%8C%EF%BC%9F.png)
有没有办法让命令
cat *tab > newfile.tab
在合并的每个文件之间插入一个空行?
答案1
利用for
构造:
GLOBIGNORE=newfile.tab
for f in *tab; do cat "$f"; echo; done >newfile.tab
展开:
GLOBIGNORE=newfile.tab
for f in *tab; do
cat "$f"; echo
done >newfile.tab
GLOBIGNORE=newfile.tab
用于newfile.tab
从 shell 通配符中排除,因为这是我们的输出文件for f in *tab
迭代以以下结尾的文件tab
cat "$f"
输出文件内容echo
添加换行符重定向的文件描述符在文件打开关闭一次
>newfile.tab
的持续时间内保持打开状态for
newfile.tab
另外,您可以使用printf
一次格式化:
for f in file.txt*; do printf '%s\n\n' "$(<"$f")"; done
展开:
for f in file.txt*; do
printf '%s\n\n' "$(<"$f")"
done
答案2
如果你不介意最后一个文件后有一个额外的空白行,你可以使用sed
例如
sed -s '$G' *.tab > newfile.tab
(这使用了 GNU sed 扩展-s
,它分别处理输入文件;因此将$G
每个文件的最后一行双倍空格)。
如果你介意多一条线,你可以通过另一条线来传输它sed
:
sed -s '$G' *.tab | sed '$d' > newfile.tab
或者,使用awk
awk 'FNR == 1 && NR != 1 {print ""} 1' *.tab > newfile.tab