2行間の1行を削除する方法

2行間の1行を削除する方法

私のファイルには、次のように何百万ものレコードがあります。

echo "NEW Cell"
grep "2553,24" out.2A25.20090308.64436.7.HDF.txt.text = 22.58   5.39  82.09 237
echo "NEW Cell"
grep "2555,20" out.2A25.20090308.64436.7.HDF.txt.text = 24.72   5.58  82.05 237
echo "NEW Cell"
grep "2557,20" out.2A25.20090308.64436.7.HDF.txt.text = 19.75   5.62  82.11 170
grep "2557,21" out.2A25.20090308.64436.7.HDF.txt.text = 24.34   5.58  82.13 120
grep "2558,22" out.2A25.20090308.64436.7.HDF.txt.text = 22.2   5.57  82.19 120
echo "NEW Cell"
grep "2560,22" out.2A25.20090308.64436.7.HDF.txt.text = 24.69   5.62  82.25 160
grep "2561,23" out.2A25.20090308.64436.7.HDF.txt.text = 24.74   5.60  82.30 120
echo "NEW Cell"
grep "2560,24" out.2A25.20090308.64436.7.HDF.txt.text = 19.38   5.54  82.30 170
echo "NEW Cell"

「New Cell」を含む行間の唯一の行という条件で、「grep」のある行を削除したいと思います。つまり、grepに新しいセル間に行がある場合は、この行を削除する必要があります。

どうすればいいですか?

私の出力は次のようになります

echo "NEW Cell"
grep "2557,20" out.2A25.20090308.64436.7.HDF.txt.text = 19.75   5.62  82.11 170
grep "2557,21" out.2A25.20090308.64436.7.HDF.txt.text = 24.34   5.58  82.13 120
grep "2558,22" out.2A25.20090308.64436.7.HDF.txt.text = 22.2   5.57  82.19 120
echo "NEW Cell"
grep "2560,22" out.2A25.20090308.64436.7.HDF.txt.text = 24.69   5.62  82.25 160
grep "2561,23" out.2A25.20090308.64436.7.HDF.txt.text = 24.74   5.60  82.30 120

ベストアンサー1

AWK解決策:

awk 'NR==n{ if (/NEW Cell/) { f=0 } else print r ORS gr }
     /NEW Cell/{ f=1; n=NR+2; r=$0; next }
     f && n-NR==1 && /^grep /{ gr=$0; next }1' file
  • /NEW Cell/{ f=1; n=NR+2; r=$0; next }- 行に会ったときNEW Cell

    • f=1=アクティビティフラグの設定f=1
    • n=NR+2-n処理する最大次の行数を設定します(次の2行)。
    • r=$0- キャプチャライン
    • next- 次のレコードに移動
  • f && n-NR==1 && /^grep /-n-NR==1キーワードで始まる2行目に会いましょう(保証)grep

    • gr=$0; next-grep行をキャプチャして次の(3番目)レコードに移動
  • NR==n{ if (/NEW Cell/) { f=0 } else print r ORS gr }- 3番目のクリティカルラインに会ったとき(保証NR==n

    • if (/NEW Cell/) { f=0 }- 処理されたセクションの下の行3に以下が含まれている場合NEW Cell- 現在の処理をリセットするf=0(以前にキャプチャされたすべての行をスキップ)
    • else print r ORS gr- それ以外の場合は、以前にキャプチャしたすべての行を印刷します。

出力:

echo "NEW Cell"
grep "2557,20" out.2A25.20090308.64436.7.HDF.txt.text = 19.75   5.62  82.11 170
grep "2557,21" out.2A25.20090308.64436.7.HDF.txt.text = 24.34   5.58  82.13 120
grep "2558,22" out.2A25.20090308.64436.7.HDF.txt.text = 22.2   5.57  82.19 120
echo "NEW Cell"
grep "2560,22" out.2A25.20090308.64436.7.HDF.txt.text = 24.69   5.62  82.25 160
grep "2561,23" out.2A25.20090308.64436.7.HDF.txt.text = 24.74   5.60  82.30 120

おすすめ記事