2011-08-08 17 views
1

行のn-Nを切り捨てたいが、行が特定の文字で始まっている場合にのみ、行全体を印刷する。私は2つの新しいファイル、最後の6つの番号の最初の6つの数字と1と他のを作りたいが、それでもヘッダーを含むので、条件が満たされていれば、特定の行の文字を切り取り、そうでなければ行全体を印刷する

John 
123456 
Mark 
123546 

John 
123456987123 
Mark 
123546792019 

は、ファイルの例を簡素化


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

2つのファイルを1つのsedスクリプトで生成し、入力ファイルを1回だけ読み込むことができます。テキストファイルに蛇を入れ、実行は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 
関連する問題