間の線を抽出したい特許1到着特許2最初の列にのみ依存するパターン行を含めると、パターンは最初の列に一度だけ存在しますが、他の列に複数回存在することがあります。私の入力ファイルの例
0.000 0.8928 0.893
0.500 PAT1 0.902
PAT1 0.8974 0.9116
1.500 0.8986 0.9199
2.000 0.8989 0.9258
2.500 PAT1 0.9285
3.000 0.8978 0.9272
3.500 0.8959 0.9219
PAT2 0.8936 0.9128
4.500 0.8912 0.9009
5.000 0.8889 PAT2
5.500 0.887 0.8718
6.000 PAT2 0.8565
6.500 0.8858 0.8414
7.000 0.8871 0.8271
私の出力は次のようになります
PAT1 0.8974 0.9116
1.500 0.8986 0.9199
2.000 0.8989 0.9258
2.500 PAT1 0.9285
3.000 0.8978 0.9272
3.500 0.8959 0.9219
PAT2 0.8936 0.9128
私の軌道は次のようにawkを使用しています
awk '/PAT1/,/PAT2/' input
しかし、これは熱とは関係ありません。
答え1
次のようにawkコードを変更します。
awk '$1 ~ /PAT1/,$1 ~ /PAT2/' input
これにより、行全体ではなく列1を一致させることができます。
答え2
そしてsed
:
$ sed -n '/^PAT1/,/^PAT2/p' input
PAT1 0.8974 0.9116
1.500 0.8986 0.9199
2.000 0.8989 0.9258
2.500 PAT1 0.9285
3.000 0.8978 0.9272
3.500 0.8959 0.9219
PAT2 0.8936 0.9128
スクリプトは範囲()内の入力の行のみをsed
印刷します(各行のデフォルト出力はオフになっています)。p
/^PAT1/
/^PAT2/
-n
Anchor( ^
) は行の先頭の文字列と一致します。