从第二列中选择匹配项,其中过滤器位于第一列中

时间:2019-02-28 10:27:20

标签: bash grep

我需要找到这个数字:第二列中的“ 3”,第一列中有“ 3”。

(这是一个示例。我还可能需要在第二列中找到“ 25”,而在第一列中找到“ 36”)。

第一列中的数字是唯一的。第一列上没有其他行以3开头。

此数据在文本文件中,我想使用bash(awk,sed,grep等)

我需要在第二列上找到一个数字,知道第一列的(唯一)数字。

在这种情况下,我需要在第二列(在本例中为第三行)的0下方grep 3:

108 330
132 0
3   3
26  350
36  25
43  20
93  10
101 3
102 3
103 1

这还不够好,因为grep应该仅应用于第一列元素,所以输出将只有一个数字:

cat foo.txt | grep -w '3' | awk '{print $2}'

尽管它是一个文本文件,但让我们想象一下它是一个MySQL表。所需的查询将是:

SELECT column2 WHERE column1='3'

在这种情况下(文本文件),我知道第一列的输入值(例如132或93或3),并且我需要在第二列中找到同一行的值(例如,分别为0、10、3)。

此致

2 个答案:

答案 0 :(得分:1)

您可以通过将第一个匹配项分组并寻找重复来找到重复的模式。这适用于您的示例:

grep -wE '([^ ]+) +\1' infile

输出:

3   3

答案 1 :(得分:1)

假设您的意思是“查找第一行中确切包含特定字符串,第二列中包含特定字符串的行”;

awk -v val="3" '$1 == val && $2 ~ $1 { print $2 }' foo.txt

还请注意如何避免使用useless use of cat.