将大型 txt 文件每 100 行拆分一次并包含原始标题(在 Mac 上)

将大型 txt 文件每 100 行拆分一次并包含原始标题(在 Mac 上)

我正在寻找一个工具或脚本(Textwrangler 或 Terminal),它可以从第 5 行开始每 100 行拆分一个较大的文本文件(前 4 行是标题行)并输出包含原始标题的单独 .txt 文件。

例如

输入:

File.txt
line1 / line4   HEADER
...
line5 / line265 DATA

输出:

File_01.txt
line1/line4   HEADER
line5/line104 DATA

File_02.txt
line1/line4   HEADER
line5/line104 DATA

File_03.txt
line1/line4   HEADER
line5/line65  DATA

文本文件使用 Windows 换行符 (CR LF),以防万一。

我目前正在手动执行此操作,因此非常欢迎任何可以使此过程更高效的建议。

答案1

  1. 删除标题并将其放入单独的文件中header.txt
  2. 分裂使用的数据split --lines=100 data.txt(这会生成许多文件,每个文件有 100 行,名为 xaa xab xac 等等)
  3. 然后将标题添加到每个文件for a in x??; do cat header.txt $a > $a.txt; done这会导致您的完成的数据文件(带有标题)被称为xaa.txt xab.txt xac.txt ...

如果数据量太大(或者您拆分成较少的行),xxx 文件不够,则拆分为四个字母命名的文件。在这种情况下,请?for上面的 -statement 中插入一个额外的内容。

编辑:
要自动提取标题,请使用head -4 origdata.txt > header.txt提取前四行。使用tail -n +4 origdata.txt > data.txt提取除前四行之外的所有内容。现在您有两个文件,一个包含标题,一个包含数据。将其合并到脚本中应该不太难。(我今天无法访问 bash)

答案2

根据 Nifle 提供的答案,我编写了一个脚本,执行他建议的命令,将原始文件名添加到输出并清理临时文件。

#!/bin/bash

FILE=$(ls -1 | grep filename.txt)
NAME=${FILE%%.txt}

head -4 $FILE > header.txt
tail -n +5 $FILE > data.txt

split -l 100 data.txt

for a in x??
    do
        cat header.txt $a > $NAME.$a.txt
    done

mv $FILE $NAME.orig.txt
rm header.txt data.txt x??

瞧!

相关内容