在Shell脚本中,将文件连接在一起并以换行符分隔。

3

我正在递归地将目录中的文件连接在一起,但是有些文件在最后一行后面缺少换行符,这会导致问题。
在过程中如何为每个文件追加一个换行符?这是脚本:

    find $1 -type f |xargs cat  > test.csv

修改后的脚本如下:

    find $1 -type f |xargs awk '1' > test.csv

5个回答

5
我知道这是一个相当老的问题,但我也遇到了同样的问题。上面的答案似乎都不能处理带空格的文件,因为使用了反引号和/usr/bin/find。这将要求我改变$IFS,这绝对不是必要的,除非你只需要使用文件。
这是我的建议:
for i in *; do cat "$i" && echo ""; done

3
您可以使用循环:
find $1 -type f | while IFS= read -r file
do
    cat "$file"
    echo
done > test.csv

1
find $1 -type f |xargs awk 'FNR==1 && NR>1 {print ""} {print}'

或者

find $1 -type f |xargs awk 'ENDFILE {print ""} {print}'

1
如果您想为任何没有自己作为最后一行的换行符的文件添加一个换行符,可以执行以下操作:
for f in `find $1 -type f`; do sed -E '$s/(.*\S+.*)/\1\n/' $f; done

编辑:我的第一个答案使用了xargs,但是没有提供预期的结果,所以退而求其次使用了循环。


1
使用for循环:
for file in $(find .); do cat $file >> huge_file; echo " " >> huge_file; done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接