2016-12-12 7 views
-6

「*アップル」の次の2行を印刷したいと思います。linux - 次の2行を現在の行に印刷するには?

$cat file.txt 
*Apple 
1234 
abcd 
*Apple 
4567 
dcba 
*Apple 
6789 
qwer 
*Apple 
6890 
rewq 

所望の出力:

*Apple 1234 abcd 
*Apple 4567 dcba 
*Apple 6789 qwer 
*Apple 6890 rewq 

私はAWKを使用してソリューションを求めています。

+2

あなたの努力は何ですか?この問題を解決するためにあなたの試みを投稿してください。 –

+0

2つの質問の1つです:1)Appleと次の2行を1行として印刷するにはどうすればよいですか?または2)Appleと次のAppleの前の行またはファイルの終わりを1行として印刷するにはどうすればよいですか。要件を明確にしたら、適切なソリューションを作成するのに役立ちます。 –

答えて

0

質問はよく(あなたは2つのだけの行をしたいですか、それはあなたの特定の例は、ターゲット文字列の各発生後に、正確に2つの行を持っているだけのことである?)指定された、おそらくこれはあなたが開始を取得されていません。

awk '/^\*Apple$/{print "\n"}1; END{print "\n"}' ORS=' ' input 

この1のみ2行を出力しますが、ほとんどの行の先頭にスプリアス領域を生成します。

awk '/^\*Apple$/{c=3}c; c--==1 {print "\n"}' ORS=' ' input 

そして、あなたが先頭にスペースを失うことができます。

awk '/^\*Apple$/{c=3} c {printf "%s%c", $0, c--==1 ? "\n":" "}' input 
0
awk -vt=-1 ' 
/^\*Apple\s*$/ { if (t > -1) print ""; t = 2; printf("%s", $0); next } 
t > 0   { t--; printf(" %s", $0) } 
' file 

入力

*Apple 
111 
222 
aaa 
*Apple 
333 
*Apple 
*Apple 
444 

出力

*Apple 111 222 
*Apple 333 
*Apple 
*Apple 444 

注、\sgawk-specificです。他のAWKの実装では、代わりに[[:space:]]を使用してください。

+0

答えをありがとう、それは大きな助けとなっています! – user2905046

関連する問題