Grep для определенного элемента

Использование awk:

$ awk -v num="$num" 'NR == num { print $NF }' data.in

Проверка:

$ num=3
$ awk -v num="$num" 'NR == num { print $NF }' data.in
two

Сценарий awk читает входной файл запись за записью (по умолчанию запись - это строка). Как только он находит запись, соответствующую переменной num, он печатает последнее поле этой записи (по умолчанию поле - это столбец, разделенный пробелами).

Переменная num внутри сценария awk - это переменная awk, которую мы инициализируем значением переменной оболочки num с помощью -v num="$num" в командной строке.

NR - это номер текущей записи, а NF - количество полей в этой записи. $NF - это данные последнего поля.

Если ваш файл строго разделен запятыми, добавьте -F ',' в командную строку:

$ awk -v num="$num" -F ',' 'NR == num { print $NF }' data.in

С помощью grep вы не можете выбрать конкретную строку, но вместе с sed вы можете отфильтровать нужную вам строку и получить последний бит после последней запятой:

$ sed -n "${num}p" data.in | grep -o '[^,]*$'

Бит sed получит указанную строку, а бит grep извлечет все после последней запятой в этой строке.

Это можно сделать и с помощью sed:

$ sed -n "${num}s/^.*,\(.*\)$/\1/p" data.in

Здесь подстановка применяется только к строке, номер которой $num, заменяет всю строку содержимым строки после последней запятой и выводит результат. Весь остальной вывод блокируется с помощью переключателя командной строки -n.

В качестве альтернативы используйте подстановку в sed, чтобы просто удалить все содержимое строки до последней запятой:

$ sed -n "${num}s/^.*,//p" data.in
1
01.06.2017, 17:06
2 ответа

Вы также можете остановиться на своем решении:

cat temp.txt | grep ^$labelNum | awk '{print $2}'

Которое будет соответствовать началу строки или

awk '/^'$labelNum'/{print $2}' temp.txt

Будет работать одинаково, но внутри awk экранирование сложное.

0
27.01.2020, 23:45

С одним awk :

awk -v lbl=$labelNum '$1 == lbl{ print $2 }' temp.txt

  • -v lbl=$labelNum - передача значения переменной labelNum в скрипт awk

  • $1 == lbl - если значение 1-го столбца равно значению переменной - выполняется следующее выражение

1
27.01.2020, 23:45

Теги

Похожие вопросы