按行数拆分文件,每行包含标题

按行数拆分文件,每行包含标题

我需要将一个.txt文件拆分为每个包含 100 行的较小文件,包括标题。我不知道这是否相关,但原始文件是这样分隔的:

COLUMN1 | COLUMN2 | COLUMN3
1 | 2 | 3
4 | 5 | 6
7 | 8 | 9

我需要从此分割生成的每个文件都有标题行。此外,它们需要在另一个目录中生成/移动到另一个目录并遵循名称模式,如file_01.txtfile_02.txt

答案1

awk 'NR==1        {a=$0}
    (NR-1)%100==0 {print a > "d/file_" int(1+(NR-1)/100)}
                  {print   > "d/file_" int(1+(NR-1)/100)}' 

答案2

gnu split可以将标题保存在变量中,然后split从第 2 行开始,使用--filter选项先写入标题,然后写入每部分的 99 行,并指定输出目录(例如path to/output dir/):

header=$(head -n 1 infile.txt)
export header
tail -n +2 infile.txt | split -l 99 -d --additional-suffix=.txt \
--filter='{ printf %s\\n "$header"; cat; } >path\ to/output\ dir/$FILE' - file_

这将创建 100 行片段,如下所示

path to/output dir/file_01.txt
path to/output dir/file_02.txt
path to/output dir/file_03.txt
..............................

答案3

在 bash 中为我工作:

lines=100; { read header && sed "1~$((${lines}-1)) s/^/${header}\n/g" | split -l $lines --numeric-suffixes=1 --additional-suffix=.txt - file_ ; } < inputfile.txt

相关内容