根据行数将文件一分为二。

问题描述 投票:3回答:4

我想把一个主文本文件分割成两个文件。这个文本文件有一定的行数,比如说NR.我需要两个不同的文件,分别称为文件1和文件2。让我们说NR.我需要两个不同的文件称为文件1和文件2。文件1是主文本文件的上半部分。文件2是主文本文件的另一半。

例子

主文本文件

aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff

我需要从主文本文件创建两个文件。

文件1应该是:

aaaaa
bbbbb
ccccc

文件2应该是:

ddddd
eeeee
fffff

我试过用awk. 但它没有工作。谢谢大家。

问候。

这就是我所做的。

total_lines=$(cat ${band_file} | wc -l)
echo $total_lines
cat $band_file | awk '
{
  if(NR<=total_lines/2)
    print > "file 1"
  else
    print > "file 2"
}'

`

bash
4个回答
2
投票

只使用 awk :

awk '
    {
        arr[NR]=$0
    }
    END{
        for (i=0; i<=NR; i++) {
            if (i < NR/2) {
                print arr[i] > "file1"
            }
            else {
                print arr[i] > "file2"
            }
        }
    }
' file.txt

到目前为止。

$ ls file[0-9]

3
投票
awk '{print>"file"(NR>(n/2)?2:1)}' n="$(wc -l <file)" file

2
投票

使用 GNU Split

例子。

split -n 2 <file> # creates xaa & xab

2
投票

你也可以用 split 为这。

split -n2 infile

xaa 现在包含:

aaaaa
bbbbb
ccccc

xab 包含。

ddddd
eeeee
fffff

你当然可以使用awk,这里有一个相当有效的替代方案。

awk -v len=$(wc -l < infile) '
  BEGIN    { outfile = "file1"  } 
  NR>len/2 { outfile = "file2"  }
           { print $0 > outfile }
' infile
© www.soinside.com 2019 - 2024. All rights reserved.