cat 文件与 shellscript 中的换行符一起

发布于 2024-12-04 02:08:20 字数 147 浏览 1 评论 0原文

我在目录中递归地将文件组合在一起,但是,某些文件在最后一行之后缺少换行符,因此这会产生问题。
如何向进程中的每个文件附加换行符?这是 shell 脚本

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

I am cating files together recursively in a directory, however, some files are missing a newline after the last line, so this creates a problem.
How do I append a newline to each file in the process? here's the shellscript


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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

薄荷→糖丶微凉 2024-12-11 02:08:20

我意识到这是一个相当老的问题,但我也遇到了同样的问题。由于使用了反引号和 /usr/bin/find,上面的答案似乎都不适用于包含空格的文件。这样做需要我更改 $IFS ,除非您只需要使用文件,否则绝对没有必要。

这是我的看法:

for i in *; do cat "$i" && echo ""; done

I realize this is a fairly old question, but I had the same problem. None of the answers above seemed to work with files with whitespace in them, because of the usage of backticks and /usr/bin/find. Doing so would require me to change $IFS which is absolutely not necessary unless you only need to use files.

This is my take on it:

for i in *; do cat "$i" && echo ""; done
马蹄踏│碎落叶 2024-12-11 02:08:20

您可以使用循环:

find $1 -type f | while IFS= read -r file
do
    cat "$file"
    echo
done > test.csv

You can use a loop:

find $1 -type f | while IFS= read -r file
do
    cat "$file"
    echo
done > test.csv
烦人精 2024-12-11 02:08:20

使用 for 循环:

for file in $(find .); do cat $file >> huge_file; echo " " >> huge_file; done

Use a for-loop:

for file in $(find .); do cat $file >> huge_file; echo " " >> huge_file; done
你的往事 2024-12-11 02:08:20
find $1 -type f |xargs awk 'FNR==1 && NR>1 {print ""} {print}'

或者

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

or

find $1 -type f |xargs awk 'ENDFILE {print ""} {print}'
森罗 2024-12-11 02:08:20

如果您想为任何没有换行符作为最后一行的文件添加换行符,您可以执行以下操作:

for f in `find $1 -type f`; do sed -E '$s/(.*\S+.*)/\1\n/' $f; done

编辑:我的第一个答案使用了 xargs,但没有提供预期的结果,所以下降回到循环。

If you wanted to add a newline for any file that does not have a newline on its own as the last line, you can do the following:

for f in `find $1 -type f`; do sed -E '$s/(.*\S+.*)/\1\n/' $f; done

EDIT: My first answer used xargs, but that didn't provide the expected result, so fell back on a loop.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文