Dis*_*ame 8 shell-script text-processing split
我有一个看起来像这样的文本文件:
foo
bar
zip
rar
tar
Run Code Online (Sandbox Code Playgroud)
我需要在 OSX 上使用 bash 脚本在每个新行之后创建一个新的文本文件,如下所示:
cat text1.txt
foo
cat text2.txt
bar
cat text3.txt
zip
cat text4.txt
rar
cat text5.txt
tar
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 11
您可以使用csplit
. 它可以很好地完成工作,除了它在输出文件名方面有点不灵活(您只能指定前缀,不能指定后缀)并且您需要第一遍来计算件数。
csplit -f text -- input.txt '//' "{$(wc -l input.txt)}"
for x in text[0-9]*; do mv -- "$x" "$x.txt"; done
Run Code Online (Sandbox Code Playgroud)
GNU 版本(而非 OSX 版本)具有解决这两个问题的扩展。
csplit -b '%d.txt' -f text -- input.txt '//' '{*}'
Run Code Online (Sandbox Code Playgroud)
或者,如果csplit
太不灵活,您可以使用 awk。
awk '{filename = sprintf("text%d.txt", NR); print >filename; close(filename)}' input.txt
Run Code Online (Sandbox Code Playgroud)
纯 bash 版本...
unset i; while read -r l; do echo $l > "text$((++i)).txt";done < text_file.txt
Run Code Online (Sandbox Code Playgroud)