如何获得合并文本的空行?

如何获得合并文本的空行?

有没有办法让命令

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的持续时间内保持打开状态fornewfile.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

相关内容