2015-10-22 57 views
1

您好嘗試在大量較小的文件中分割大文件.dat(120 Mb)。將大文件分割爲小文件,條件爲

我知道split命令應爲我做到這一點,讓我們說:

split --lines=#number file.dat

這一鴻溝我的大文件中的一些具有相同的行數的檔案(#NUMBER) 。

如果我想,而不是,如果類似的條件與文件劃分,我該怎麼做呢?

例如:當第一列的整數部分不同於先前的整數部分時,我想分割這個文件。

甲FILE.DAT例子應該是:

1.2 432.1 87.1 
1.3 3.5 557.2 
2.1 1.2 43.56 
2.33 19.2 34.7 
2.4 32.6 41.8 
2.56 23.5 66.9 
4.1 143.7 54.0 
5.5 432.8 23.4 
6.7 423.9 0.3 

與這個例子中我應該有5個不同的文件,第一個與所述第一兩行;第二行四行;第三行一行,等等。 這可能嗎?謝謝大家。

+0

多少輸出文件,你希望你的完整數據集建立? –

回答

2

awk來拯救!

$ awk ' NR==1{p=int($1);c=1} 
     int($1)==p{print > "file"c".seq";next} 
       {p=int($1);c++;print > "file"c".seq"}' input 


$ ls file*.seq 
file1.seq file2.seq file3.seq file4.seq file5.seq 

$ cat file*.seq 
1.2 432.1 87.1 
1.3 3.5 557.2 
2.1 1.2 43.56 
2.33 19.2 34.7 
2.4 32.6 41.8 
2.56 23.5 66.9 
4.1 143.7 54.0 
5.5 432.8 23.4 
6.7 423.9 0.3 

$ wc -l file*.seq 
    2 file1.seq 
    4 file2.seq 
    1 file3.seq 
    1 file4.seq 
    1 file5.seq 
    9 total 

當打開太多文件時,您需要關閉它們。變化

{p=int($1);c++;print > "file"c".seq"} 

{close("file"c".seq");p=int($1);c++;print > "file"c".seq"} 
+0

完美但不幸的是,它對我說: 'awk:無法打開「file1021.seq」輸出(太多打開文件)' –

+0

如果文件在該範圍內,則必須關閉這些文件。 – karakfa

0

假設您不想要 bash,awk可以將打印語句重定向到單個文件。

例如,您可以重定向到基於您的第一個字段的值的文件:

awk '{ 
    outfile = $1 ".txt" 
    print $0 > outfile 
}' input_file.txt 

注意,上面的代碼將需要一些調整你的情況來工作,但它應該足夠讓你開始。

相關問題