我有一个包含多个文本文件的文件夹。我试图将所有文本文件拆分为每个文件 10000 行,同时保持基本文件名 ,即如果 filename1.txt 包含 20000 行,则输出将是 filename1-1.txt(10000 行)和 filename1-2.txt(10000 行)。
我尝试使用 split -10000 filename1.txt
但这并没有保留基本文件名,我必须为文件夹中的每个文本文件重复该命令。我还尝试在 *.txt 中执行 for f;拆分 -10000 $f.txt;完成
。这也行不通。
知道我该怎么做吗?谢谢。
最佳答案
for f in filename*.txt; do split -d -a1 -l10000 --additional-suffix=.txt "$f" "${f%.txt}-"; done
或者,写在多行上:
for f in filename*.txt
do
split -d -a1 -l10000 --additional-suffix=.txt "$f" "${f%.txt}-"
done
工作原理:
-d
告诉split
使用数字后缀-a1
告诉split
后缀仅以单个数字开头。-l10000
告诉split
每 10,000 行拆分一次。--additional-suffix=.txt
告诉split
将.txt
添加到新名称的末尾文件。"$f"
告诉split
要拆分的文件的名称。"${f%.txt}-"
告诉split
用于拆分文件的前缀名称。
例子
假设我们从这些文件开始:
$ ls
filename1.txt filename2.txt
然后我们运行我们的命令:
$ for f in filename*.txt; do split -d -a1 -l10000 --additional-suffix=.txt "$f" "${f%.txt}-"; done
完成后,我们现在有了原始文件和新的拆分文件:
$ ls
filename1-0.txt filename1-1.txt filename1.txt filename2-0.txt filename2-1.txt filename2.txt
使用旧的、功能较少的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
关于linux - 每 n 行拆分批量文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33444369/