根据行数将文件拆分为一半

时间:2013-02-22 16:41:40

标签: bash

我想将主文本文件拆分为两个文件。文本文件具有一定数量的行。让我们说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"
}'

`

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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]

答案 2 :(得分:2)

使用GNU Split

示例:

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

答案 3 :(得分:1)

你也可以使用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