Как получить 1-е поле файла только тогда, когда 2-е поле соответствует строке? - PullRequest
0 голосов
/ 10 июля 2020

Как получить 1-е поле файла, только если 2-е поле соответствует заданной строке?

# cat temp.txt

Ankit   pass
amit    pass
aman    fail
abhay   pass
asha    fail
ashu    fail
cat temp.txt | awk -F"\t" '$2 == "fail" { print $1 }'*

не выводит

Ответы [ 3 ]

0 голосов
/ 10 июля 2020

Другой синтаксис с awk:

awk '$2 ~ /^faild$/{print $1}' input_file

Удаленная команда cat.

  • ^ начальная строка
  • $ конечная строка

Это лучший способ подобрать узор.

0 голосов
/ 11 июля 2020

Либо:

  1. Ваши поля не разделены табуляцией или
  2. У вас есть пробелы в конце соответствующих строк или
  3. У вас есть строка DOS- окончания, и поэтому есть CR в конце каждой строки, а также в конце каждых $ 2 в каждой строке (см. Почему вывод моего инструмента перезаписывается и как это исправить? )

В GNU cat вы можете запустить cat -Tev temp.txt, чтобы увидеть табуляции (^I), CR (^M) и окончания строк ($).

0 голосов
/ 10 июля 2020

Кажется, ваш код работает нормально, когда я удаляю * в конце

cat temp.txt | awk -F"\t" '$2 == "fail" { print $1 }'

Еще нужно проверить, использует ли ваш файл табуляцию или пробелы. Моя копия / вставка вашего файла данных скопировала пробелы, поэтому мне нужна была эта строка:

cat temp.txt | awk '$2 == "fail" { print $1 }'

Другой способ сделать это - с помощью grep:

cat temp.txt | grep fail$ | awk '{ print $1 }'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...