次のprova.txt
ようなファイルがあります。
Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random2
random3
random4
extra1
extra2
bla
Start to grab from here: 2
fix1
fix2
fix3
fix4
random1546
random2561
extra2
bla
bla
Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random22131
「ここから始めましょう」から最初の空白行にグレップアウトする必要があります。出力は次のようになります。
Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random2
random3
random4
Start to grab from here: 2
fix1
fix2
fix3
fix4
random1546
random2561
Start to grab from here: 1
fix1
fix2
fix3
fix4
random1
random22131
「ここから始めます」の後の行はランダムであるため、-A -B grepフラグは機能しません。
cat prova.txt | grep "Start to grab from here" -A 15 | grep -B 15 "^$" > output.txt
空白行が表示されるまで、最初の行を取得する方法を見つけるのを手伝ってくれますか(「ここから開始」など)。「ここからつかむ」の後にランダムなラインがいくつあるか予測できません。
UNIXと互換性のある解決策はありがたいです(grep、sed、awkはperlや同様のものより優れています)。
編集:@ john1024による素晴らしい応答の後、私はそれが可能かどうか知りたいです:
1°ブロックをソートします(ここから開始するように開始:1、1、2)。
2°4つの(アルファベット順でランダムな)行を削除しますfix1、fix2、fix3、fix4が常に4です
3°は、sort -uコマンドのように、ランダムな複製を最終的に削除します
最終的な出力は次のようになります。
# fix lines removed - match 1 first time
Start to grab from here: 1
random1
random2
random3
random4
#fix lines removed - match 1 second time
Start to grab from here: 1
#random1 removed cause is a dupe
random22131
#fix lines removed - match 2 that comes after 1
Start to grab from here: 2
random1546
random2561
または
# fix lines removed - match 1 first time and the second too
Start to grab from here: 1
random1
random2
random3
random4
#random1 removed cause is a dupe
random22131
#fix lines removed - match 2 that comes after 1
Start to grab from here: 2
random1546
random2561
2番目の出力は、最初の出力よりも優れています。他のUNIXコマンドマジックが必要です。