如何提取同一列中两个图案之间的线?

如何提取同一列中两个图案之间的线?

我想提取之间的线专利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)。

锚点 ( ^) 仅需要匹配行开头的字符串。

相关内容