2013-02-22 71 views
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" 
}' 

`

+0

如果你改變了你的例子是讀了'... | awk -v total_lines = $ total_lines'...'它應該工作。 – Thor 2013-02-25 07:31:18

回答

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] 
+0

這是在向表單提問之前所嘗試的。我非常感激你的時間和幫助。 – user2100161 2013-02-24 09:02:06

+0

這是我的拍攝... – user2100161 2013-02-24 09:02:32

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 
+0

注意到這是GNU'split'的擴展。 – 2013-02-22 16:50:20

+0

@JonathanLeffler:它支持GNU和BSD分裂,不知道別人。 – Thor 2013-02-22 16:55:31

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

+1爲最短的awkish方式 – 2013-02-22 20:21:03

相關問題