从同一字符串中提取行

从同一字符串中提取行

我有一个这样的表:

在此输入图像描述

以及一个包含第三列中的 2 个字符串的文件:applepotato

我想提取标题和包含字符串 apple 和potato 的所有行以获得此

在此输入图像描述

谢谢

答案1

使用awk

awk 'FNR == 1 || /potato|apple/'

使用sed

sed -n '1p; /potato\|apple/p'

potato|apple在这两种情况下,都会打印行号 1 和任何匹配的行。

答案2

这是纯文本的 txt 表:

A       B       C       D       E
21      63      apple   yellow  5
23      69      lemon   green   6
45      135     orange  yellow  7
67      201     mango   green   4
54      162     potato  maroon  5

虽然我可以想到一个复杂度较低的解决方案,但我认为这有点黑客:-)假设表txt文件被称为table1

$ head -1 table1 && grep '\b\(potato\|apple\)\b' table1

这将获取第一行并将grep结果附加到其中。\b是一个词边界。因此,这将确保像“grapple(hook)”这样的词被过滤掉:)另一个更复杂的解决方案将假设 A、B、C... 由制表符分隔\t

$ grep '\(\b\(potato\|apple\)\b\|\([A-Z]\|\(\t\|\n?$\)\)\)' table1

相关内容