文字列または数字を一致させた後に後続の行を削除する方法は? [コピー]

文字列または数字を一致させた後に後続の行を削除する方法は? [コピー]

次の情報(部分cat file)を含む大容量ファイルがあるとします。

33.829037   -0.113737   1.157153
33.830036   -0.113620   1.157157
33.831036   -0.113495   1.157169
33.832035   -0.113365   1.157191
33.833035   -0.113242   1.157228
33.834034   -0.113157   1.157273
33.835033   -0.113071   1.157300

最初の列には後続のすべての行が削除されたと仮定し、浮動小数点数が昇順で含まれているため、33.832035出力は次のようになります。

33.829037   -0.113737   1.157153
33.830036   -0.113620   1.157157
33.831036   -0.113495   1.157169
33.832035   -0.113365   1.157191

sed適切なテキスト処理ツールを使用してこれをどのように実行できますか?

頑張った1行目に文字列が最初に表示された後のすべての行を削除します。しかし、私の場合、うまく実装されていません。

答え1

接続問題に対する解決策のわずかな変形には、最初の一致行が含まれます。

sed '/33.832035/q'

これにより、「33.832035」を含む最初の行を含むすべての行が印刷され、終了します。

たとえば、AWKなどの他のテキスト処理言語にも同様の内容があります。

awk '1; /33.832035/ { exit }'

これにより、すべての行(1常に一致し、AWKに現在の行を印刷するデフォルトのジョブが適用されます)を印刷し、現在の行が「33.832035」と一致すると終了します。

どちらの場合も、正規表現をより制限的に作成できます。例えば /^33.832035 /行の先頭の完全なフィールドのみが一致します。

答え2

Awk方法:

awk '$1 == 33.832035{ print; exit }1' file

出力例:

33.829037   -0.113737   1.157153
33.830036   -0.113620   1.157157
33.831036   -0.113495   1.157169
33.832035   -0.113365   1.157191

関連情報