2013-02-14 90 views
0

假設我有一個文件如下:如何選擇文件中出現多次的相同行數?

101 abcd <time> 
106 efgh <time> 
107 ijkl <time> 
110 pqrs <time> 
105 trsf <time> 
101 yrte <time> 
109 tyti <time> 
110 tyui <time> 

我想要做從101開始的行塊的一些操作,並在110 我能解決它結束的時候,只有一個次數101和110在一個文件中。

sed -ne 's/101/,/110/p' file1 > file2 

使用此命令,我可以取出我想要處理的大量行。 請幫我找到能夠在第一個文件中保存第一個塊,在第二個文件中保存第二個塊的邏輯,等等。

我正在AIX中編寫腳本。

+0

我猜's'不應該在'sed'腳本中? – 2013-02-14 20:57:46

+0

嗨列弗,是的,s不應該在那裏.. – user2073484 2013-03-13 22:07:36

回答

1

你可以這樣做:

awk '/^101/ && !i { c++; i=1 } i { print > "file" c } /^110/ { i=0 }' input 

這只是增加一個計數器(c)各行相匹配^101時間,但前提是尚未在塊正在打印。第二個子句將輸出文件打印到名稱中帶有計數器的輸出文件(第三個子句關閉標誌(i),該標誌用於確定當前行是否位於要打印的塊中。

另一種選擇是簡單地做:

awk '/^101/,/^110/{ print > "output" c } /^110/{c++}' c=1 input 
+0

感謝威廉,它工作.. :) – user2073484 2013-03-13 22:08:12

0

,你可以使用awk嘗試,這裏是一個簡短的一行做工作:

awk '/101/{++i;f=1} f{print $0>"file"i} /110/{f=0}' file 

測試你的榜樣:

kent$ echo "101 abcd <time> 
106 efgh <time> 
107 ijkl <time> 
110 pqrs <time> 
105 trsf <time> 
101 yrte <time> 
109 tyti <time> 
110 tyui <time>"|awk '/101/{++i;f=1} f{print $0>"file"i} /110/{f=0}' 

kent$ head * 
==> file1 <== 
101 abcd <time> 
106 efgh <time> 
107 ijkl <time> 
110 pqrs <time> 

==> file2 <== 
101 yrte <time> 
109 tyti <time> 
110 tyui <time> 
相關問題