次の情報(部分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