Выберите совпадение во втором столбце, где фильтр находится в первом столбце - PullRequest
0 голосов
/ 28 февраля 2019

Мне нужно найти это число: «3» во втором столбце, где в первом столбце есть «3».

(Это пример. Мне также может понадобиться найти '25 'во втором столбце, где в первом столбце есть' 36 ').

Числа в первом столбце являются уникальными.В первом столбце нет другой строки, начинающейся с «3».

Эти данные находятся в текстовом файле, и я хотел бы использовать bash (awk, sed, grep и т. Д.)

Мне нужно найти число во втором столбце, зная (уникальный) номер первого столбца.

В этом случае мне нужно получить grep 3 ниже 0 во втором столбце(и, в данном случае, третья строка):

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 голосов
/ 01 марта 2019

Предполагая, что вы имеете в виду «найти строки, в которых первый столбец содержит определенную строку, а второй содержит эту строку где-то внутри»;

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

Обратите также внимание на то, как это позволяет избежать бесполезного использованияcat.

0 голосов
/ 28 февраля 2019

Вы можете найти повторяющиеся шаблоны, сгруппировав первое совпадение и ища повторение.Это работает для вашего примера:

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

Вывод:

3   3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...