我想提取之间的线专利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
)。
锚点 ( ^
) 仅需要匹配行开头的字符串。