linux - 每 n 行拆分批量文本文件

标签 linux shell unix awk cygwin

我有一个包含多个文本文件的文件夹。我试图将所有文本文件拆分为每个文件 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/

相关文章:

javascript - 带脚本的文本编辑器...适用于 Linux

linux - 如何从 bash 中排队一组原始音频文件

linux - 如何将服务器负载值存储在变量中

linux - 如何为重复用户名的每个实例添加 +1 的增量

regex - 使用 unix sed 替换 js 路径

bash - 带有/空格+ ssh的变量

linux - 谁能告诉我Busybox是如何实现自动补全的

linux - work_queue 线程安全吗?

linux - 如何在 Linux 上不使用 ps 命令获取所有进程 ID

regex - 使用 Perl Regex Multiline 重新格式化文件