xyz.txt
次の3行を含むファイルがあります。
I am ok.
I am fine.
all good.
am
その行を含まない行を見つけて前の行に追加する必要があります。
与えられた例では、必要な出力は次のとおりです。
I am ok.
I am fine. all good.
そして、スクリプトは大容量ファイルでも機能するはずです。たとえば、ファイルに10行があり、3行と7行に「am」がない場合は、3行を2行に追加し、7行を6行に追加する必要があります。
ベストアンサー1
アッ解決策(単語境界演算子awk
にGNUまたはbusyboxが使用されていると仮定):\<
\>
拡張サンプルfile
:
I am ok.
I am fine.
all good.
am I sleeping?
how's that
I am sure
about that
and think on.
For that I am now
awk '{ printf "%s%s",(NR==1? "": (!/\<am\>/? OFS:ORS)),$0 }END{ print "" }' file
"%s%s"
- 2つの仕様の形式文字列です。 1つ目は、%s
潜在的な項目「先行」区切り記号です。- 最初のレコード()の場合は(空の文字列)
NR==1
です。""
- 単語を含まないレコードの場合
am
-OFS
(出力フィールド区切り文字、つまりスペース) am
- という単語を含むレコードの場合ORS
(基本改行文字である出力レコード区切り記号)
- 最初のレコード()の場合は(空の文字列)
出力:
I am ok.
I am fine. all good.
am I sleeping? how's that
I am sure about that and think on.
For that I am now