2011-08-08 33 views
1

我想要剪切一行的字符n-N,但只有當行以某些字符開頭時,否則我想要打印整行。如果滿足條件,則從某些行切割字符,否則整行打印

簡化文件例如:

John 
123456987123 
Mark 
123546792019 

我想提出兩個新的文件,一個與前6號和其他與過去的6個號碼,但仍然包含頭文件,所以

John 
123456 
Mark 
123546 

John 
987123 
Mark 
792019 

我可以告訴grep的切口,只切開,如果字符串匹配,但以其他方式給整個文件?什麼樣的awk命令可以在條件滿足的情況下切割線條或打印整條線?

謝謝

回答

2

grep只能grep,不能削減。

awk '/^[0-9]/{print(substr($0,0,6));next;} 
     # Fall through here in case of no match 
     {print}' inputfile 
+0

非常感謝!這是完美的(與一堆修改)。我正在嘗試使用grep'CHAR'| cut -c n = N,但是這樣做效果更好。 –

1

您可以在一個sed腳本中生成2個文件,只讀取一次輸入文件。在文本文件中放入下面的內容,並運行sed -f script_file input_file。它將生成f1和f2文件並輸出輸入文件。

/^[^0-9]/{ 
w f1 
w f2 
} 
/^[0-9]/{ 
h 
s/^\(.\{6\}\).*/\1/ 
w f1 
g 
s/^.\{6\}// 
w f2 
g} 
0

grep的應該是罰款:

grep -E -o '^[0-9]{6}|^[^0-9].*' input > first.txt 
grep -E -o '[0-9]{6}$|^[^0-9].*' input > last.txt 
相關問題