Подтвердить что ты не робот

Использовать awk, чтобы найти первое вхождение только строки после разделителя

У меня есть куча документов, у всех есть строка, Account number: 123456789 в разных местах.

Мне нужно сделать это, чтобы проанализировать файлы и найти номер учетной записи. Итак, awk нужно искать Account number: и сразу же возвращать строку.

Например, если это было:

Account number: 1234567

awk должен возвращаться:

1234567

Как только он найдет первое вхождение, он может перестать искать.

Но я в тупике. Какой правильный способ сделать это с помощью awk?

4b9b3361

Ответ 1

Один из способов:

awk -F: '$1=="Account number"{print $2;exit;}' file

Я предполагаю, что вы хотите остановить момент, когда вы найдете первое вхождение в файл. Если вы хотите найти вхождения в каждой строке файла, просто удалите exit.

Ответ 2

Вы можете использовать if, чтобы проверить, соответствуют ли $1 и $2 "Учетная запись" и "число:". Если они это сделают, напечатайте $3:

> awk '{if ($1 == "Account" && $2 == "number:") {print $3; exit;}}' input.txt

Ответ 3

Для таких совпадений я предпочитаю использовать grep с look-behind:

grep -Po '(?<=Account number: )\d+' file

или

grep -Po 'Account number: \K\d+' file

Это говорит: напечатайте любую последовательность цифр (\d+), появляющуюся после строки Account number:.

Во втором случае \K очищает согласованную строку, чтобы она начинала печатать после такого \K.


Посмотрите в действии с файлом file:

Account number: 1234567
but then another Account number: 789
and that all

Посмотрим, как выглядит вывод:

$ grep -Po '(?<=Account number: )\d+' file
1234567
789

Ответ 4

Вы также можете использовать sed -n s///p:

sed -En 's/^Account number: (.+)/\1/p' *.txt | head -n1