2012-09-27 24 views
0

我有一個txt文件,其中每行以參與者號開頭,後面跟着日期和其他變量(僅限數字),所以格式爲:使用Linux中的過濾器在txt文件中分組行,以創建多個txt文件

S001_2 20090926 14756 93  
S002_2 20090803 15876 13  

我想編寫一個腳本,創建每個文件只包含20個參與者的較小txt文件(因此第一個包含S001_2到S020_2的行;第二個從S021_2到S040_2;主題的總數大約爲200)。然而,主體沒有組織,因此我不能用sed設置範圍。

什麼是最好的命令過濾ppts成塊取決於數字(SOO1_2)線開始?

在此先感謝。

回答

1

使用split命令可以拆分不帶範圍和sed的文件(或過濾結果)。根據文檔,這應該工作:

cat file.txt |拆分-l 20 - PREFIX

會產生這樣的文件PREFIXaa,PREFIXab,...

如果你要過濾的文件(請注意,它不.txt擴展名添加到文件名!)首先,在@Sergey描述的方式:

cat file.txt |排序|拆分-l 20 - PREFIX

1

沒有任何參數的排序應該是合適的,因爲您的號碼中有前導零,如S001_2。使用sed的file_sort.txt

這看起來像一個分裂整個腳本分類文件轉換成20行的文件

sort file.txt > sorted.txt 

然後你就可以設置範圍::所以,第一次將文件排序

num=1; 
i=1; 
lines=`wc -l sorted.txt | cut -d' ' -f 1`;#get number of lines 
while [ $i -lt $lines ];do 
    sed -n $i,`echo $i+19 | bc`p sorted.txt > file$num; 
    num=`echo $num+1 | bc`; 
    i=`echo $i+20 | bc`; 
done; 
+0

無用的使用貓! http://partmaps.org/era/unix/award.html#cat –

+0

你是對的,更正。 – Sergey

1
$ split -d -l 20 file.txt -a3 db_ 

生產:db_000,db_001,db_002,...,db_N