无换行的cat输出:为何tr ' '命令无法生效?
问题原因与解决方案
为什么tr命令无效?
你的tr '\n' ' '命令完全起不到给每个文件加换行的作用,核心原因是:所有源文件本身就没有换行符。
cat filename_*只是把各个文件的内容直接拼接,因为每个文件末尾都没有换行,合并后的输出里从头到尾都找不到任何换行符。而tr的作用是替换输入中已有的字符——没有换行符可供替换,它自然什么都不会做,最终输出还是单行。
正确的解决方法
要实现给每个文件的内容后添加换行再合并,推荐以下几种方法:
用
sed给每个文件末尾补换行:sed -e '$a\' filename_* > outfile$a\表示在每个输入文件的最后一行之后追加一个换行,无论原文件是否有末尾换行,都能确保每个文件的内容后有一个换行再进行合并。用
awk处理合并:awk '{print} END{print ""}' filename_* > outfile{print}会打印每一行内容并自动追加换行,END{print ""}确保最后一个文件的内容后也有换行,避免最终输出的最后一行无换行的情况。用
printf循环处理每个文件:for f in filename_*; do printf "%s\n" "$(<"$f")"; done > outfile循环遍历每个文件,
printf "%s\n"会将文件内容输出后强制添加一个换行,再统一重定向到输出文件。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

