grep файл, чтобы прочитать ключ: значение - PullRequest
1 голос
/ 04 апреля 2020

У меня есть файл file.txt, в котором есть различные пары key:value. При чтении определенного value из файла печатается более одной строки. Пожалуйста, помогите мне исправить мои логи c ниже.

INPUT_FILE

cat file.txt

NAMES:1234-A0;5678-B0;3456-C0
1234-A0:1234_12345678_987

DESIRED_OUTPUT

1234_12345678_987

MY_CODE

cat file.txt | grep -w 1234-A0 | cut -f2 -d ':'

ВЫХОД

1234-A0;5678-B0;3456-C0 1234_12345678_987

Пожалуйста, дайте мне знать, что не так в приведенной выше команде (?) И какая должна быть правильная команда для получения desired output. Спасибо!

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Во-первых,

Пожалуйста, дайте мне знать, что не так в приведенной выше команде

Когда вы написали cat file.txt | grep -w 1234-A0, это должно быть grep -w 1234-A0 file.txt (я имею в виду, что это бесполезно) передать из cat в команду, которая может непосредственно читать файл, плюс вы потребляете часть ценных ресурсов, делая свой сценарий неоптимальным)
При этом вы запросили строки со словом "1234-A0 "... и это именно ваш вывод! Теперь попробуйте следующее и запишите различия:

  • grep ':1234-A0' file.txt (у вас должна быть первая строка)
  • grep '1234-A0:' file.txt (у вас должна быть вторая)
  • grep '^1234-A0' file.txt (тоже вторая строка)

Добавьте другие строки, с произвольным "1234-A0" в другом месте файла и перезапустите примеры выше, чтобы увидеть различия.

Last,

какая должна быть правильная команда

После того, как вы дадите правильный шаблон, вы можете теперь резать трубу, как вы это делали: grep '^1234-A0:' file.txt | cut -f2 -d: например.

Язык AWK - это еще один способ go, более краткий, но не сейчас, поскольку вы все еще изучаете BRE (также встречается в sed и vi, тогда как awk использует ERE)

1 голос
/ 04 апреля 2020

awk - правильный инструмент для этого, поскольку ваши данные разделены общим символом и структурированы в столбцы и строки. Вы можете использовать эту команду awk:

awk -F: '$1 == "1234-A0"{print $2}' file

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