HiT*_*uch 13 shell text-processing cat newlines
我有一堆.text
文件,其中大部分以标准 nl 结尾。
一对夫妇最后没有任何终结者。最后一个物理字节(通常)是一个字母数字字符。
我正在使用cat *.text >| /tmp/joined.text
,但随后注意到joined.text 中的几个地方,其中文件的第一行出现在前一个文件的最后一行的末尾。检查前一个文件,我看到没有行终止符——连接解释。
这就提出了一个问题,什么是最简单的连接方法,坚持缺少的换行符?这些选项呢?
mur*_*uru 21
如果需要,可以添加换行符的另一个命令是awk
,因此:
awk 1 ./*.txt
Run Code Online (Sandbox Code Playgroud)
这里的 1 是在 awk 中获得真条件的最简单方法,它适用于这个目的,因为真条件下的 awk 默认操作是打印输入行。
小智 5
这个方便的 Perl 单行代码可以完成添加缺少的换行符的工作(仅当该换行符尚未存在时):
perl -lpe '' ./*.text > output
Run Code Online (Sandbox Code Playgroud)
使用cut
GNU 等一些实现cut
,您可以执行以下操作:
cut -b 1- ./*.text > output
Run Code Online (Sandbox Code Playgroud)
因为如果缺少的话它将添加缺少的换行符。
我想到的第一种方法是循环文件并仅打印其内容并附加换行符:
for f in *text; do
printf '%s\n' "$(cat < "$f")"
done > /tmp/joined.text
Run Code Online (Sandbox Code Playgroud)
这$()
将删除任何已经存在的换行符,因此这将导致\n
每个文件末尾只有一个换行符。