У меня есть входной файл FILE1.TXT, как показано ниже.
11 id1
12
13 AGE = 20
14 NAME = NAME1
15
16 id2
17
18 AGE = 30
19 NAME = NAME2
.
.
.
110 idXYZ
111
112 AGE = AGEXYZ
113 NAME = NAMEXYZ
114
115 idZZZ
116
Я хочу найти все поля, принадлежащие определенному идентификатору, и получить значение NAME
Мне удалось перебрать каждый Id и сформировать команду ниже для каждого Id по мере необходимости.
sed -n '/11/,/14/p' FILE1.TXT | grep NAME | awk -F "= " '{print $2}'
Проблема в том, что я получаю вывод NAME1 , в дополнение к этому я также получаю NAMEXYZ .
Что нужно изменить, чтобы я получил только NAME1, но не NAMEXYZ ?
В качестве обходного пути работают следующие команды.
sed -n '/11/,/14/p' FILE1.TXT | grep NAME | awk -F "= " '{print $2}'|head -1
Есть ли «переключатель» или я что-то упустил?
^(random no of spaces)11
?sed -n '/^\s*11 /,/^\s*14 /p'
sed -n '/^11 /,/^14 /p' | awk '/NAME/{print $NF}'
, вы пробовали это?Используйте границы слов:
будет соответствовать,
NAME1
а неNAME1XYZ
илиXYZNAME1
.По аналогии,
не будет соответствовать строки, содержащие
111
и142
.РЕДАКТИРОВАТЬ: Кажется, что числа во входном файле на самом деле являются номерами строк. Если это так, вы можете просто сказать:
чтобы получить нужные строки.
источник
NAME
строками 11 и 14 есть только одна . Итак, почемуsed
смотрит на111
и114
? Как сделать так, чтобы он не смотрел между111
и114
?sed
выражение.grep
с-w
флагом? не так ли?-w
будет эквивалентным. Дляsed
примера-w
немного отличается.Вы можете использовать AWK
Это будет выглядеть строки между 13 до 17, затем искать имя и, если совпадение, то будет печатать последнее слово из
Name = LastWord
источник
$
ранее,NR
и это вызвало ошибку.Вам не нужен никакой другой инструмент для этого,
sed
он легко справится с этим.Это должно предоставить вам только первую последовательность непробельных символов после фразы «NAME =» для каждой строки, в которой эта фраза находится между строками 11 и 14 любого входного файла
sed
.источник
Сед не подходит для этой работы. Используйте awk, где вы можете указать идентификатор, который вы ищете, и распечатать следующее появившееся имя.
источник
универсальная версия, не основанная на номере строки, но ссылка на идентификатор
источник
Вы можете напечатать те строки, которые содержат соответствующий шаблон, используя sed следующим образом:
-n
- эти опции отключают эту автоматическую печать, и sed выдает выходные данные только при явном указанииp
команды.p
- Распечататьисточник