複数行にまたがるレコードを処理する必要があります。たとえば、複数行レコードを1行に変換してから、必要なものをすべて取得する必要があります。レコードの境界が明確でないため、RS
を\n\n
に設定するだけではありません。私が区画さレコードを取得したら、私はRS
を設定することができますレコードが区切られていないときに複数行レコードを1行に作成する
awk '{gsub(/^constant_string/,"\n&")}1' input
constant_string bla bla1
bla bla bal
fooo foooooo baaar
constant_string bla1 bla2
abcd cdfe fghi jkhil
foo bar bar bar bar bar bar
constant_string bla bla3
random data is present
:これを達成するために
cat input
constant_string bla bla1
bla bla bal
fooo foooooo baaar #End of record 1
constant_string bla1 bla2
abcd cdfe fghi jkhil
foo bar bar bar bar bar bar #End of record 2
constant_string bla bla3
random data is present #End of record 3
、私は次のように二つのレコードの間に新しい行を追加することによって、上の画定にこれらの未画定レコードを変換しました\n\n
にして、私が必要とするものは何でもしてください。
awk '{gsub(/^constant_string/,"\n&")}1' input |awk -v RS= '{$1=$1}1'
constant_string bla bla1 bla bla bal fooo foooooo baaar
constant_string bla1 bla2 abcd cdfe fghi jkhil foo bar bar bar bar bar bar
constant_string bla bla3 random data is present
質問:私は2つのステップを使用してソリューションを実現することができる午前
、それはそれをawkの内の1つのステップを行うことが可能ですか?
は、私は次のよう試みたが、うまくいきませんでした:
awk -v RS="" '{gsub(/^constant_string/,"\n&")}1' input
awk -v RS="" '{$0=gensub(/^constant_string/,"\n&",$0)}1' input
をはいそれは可能ですが、それはスクリプト内の余分な解析につながります。ストリーミングされたバージョンのほうがはるかに優れています。おそらく、最初のビットのためにsedに入れ替えてください。例: '