use*_*436 8 unix linux shell awk cygwin
我有一个包含多个文本文件的文件夹.我正在尝试将所有文本文件拆分为每个文件10000行,同时保留基本文件名i.e. if filename1.txt contains 20000 lines the output will be filename1-1.txt (10000 lines) and filename1-2.txt (10000 lines).
我试图使用,split -10000 filename1.txt
但这不保留基本文件名,我必须为文件夹中的每个文本文件重复该命令.我也尝试过for f in *.txt; do split -10000 $f.txt; done
.这也行不通.
知道我怎么能这样做?谢谢.
Joh*_*024 16
for f in filename*.txt; do split -d -a1 -l10000 --additional-suffix=.txt "$f" "${f%.txt}-"; done
Run Code Online (Sandbox Code Playgroud)
或者,写在多行:
for f in filename*.txt
do
split -d -a1 -l10000 --additional-suffix=.txt "$f" "${f%.txt}-"
done
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
-d
告诉split
使用数字后缀
-a1
告诉我split
只从后缀的单个数字开始.
-l10000
告诉split
每10,000行拆分.
--additional-suffix=.txt
告诉split
添加.txt
到新文件名称的末尾.
"$f"
告诉split
要拆分的文件的名称.
"${f%.txt}-"
告诉split
用于拆分文件的前缀名称.
假设我们从这些文件开始:
$ ls
filename1.txt filename2.txt
Run Code Online (Sandbox Code Playgroud)
然后我们运行我们的命令:
$ for f in filename*.txt; do split -d -a1 -l10000 --additional-suffix=.txt "$f" "${f%.txt}-"; done
Run Code Online (Sandbox Code Playgroud)
完成后,我们现在拥有原始文件和新的拆分文件:
$ ls
filename1-0.txt filename1-1.txt filename1.txt filename2-0.txt filename2-1.txt filename2.txt
Run Code Online (Sandbox Code Playgroud)
split
如果您的分割不提供--additional-suffix
,请考虑:
for f in filename*.txt
do
split -d -a1 -l10000 "$f" "${f%.txt}-"
for g in "${f%.txt}-"*
do
mv "$g" "$g.txt"
done
done
Run Code Online (Sandbox Code Playgroud)