Как прочитать n-ую строку и m-е поле текстового файла в Unix - PullRequest
0 голосов
/ 07 июня 2018

Предположим, у меня есть |файл с разделителями,

Line1:    1|2|3|4
Line2:    5|6|7|8
Line3:    9|9|1|0

Теперь мне нужно прочитать 3 поля во второй строке, что в приведенном выше примере равно 7, как я могу это сделать, используя команду Cut или Sed.Я новичок в Unix, пожалуйста, помогите

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Это должно работать:

sed -n '2p' file |awk -F '|' '{print $3}'

0 голосов
/ 07 июня 2018

Это может работать для вас (GNU sed):

sed -rn '2s/^(([^|]*)\|?){3}.*/\2/p' file

Отключите автоматическую печать, установив параметр -n, включите более легкое объявление регулярных выражений с помощью параметра -r.Используйте сопоставление с образцом и обратные ссылки, чтобы заменить всю вторую строку третьим полем той же строки и вывести результат.

Адрес команды подстановки ограничен только второй строкой.

Регулярное выражение группирует символы без разделителей, за которыми следует разделитель определенное количество раз.Во второй группе сохраняются только символы без разделителей для определенного номера.Каждая группировка заменяется следующей, и поэтому сообщается о последней группировке, .* потребляет остаток строки, и поэтому печатается только третье поле (содержимое второй группы).

Примечание: разделитель будетприсутствовать после последнего столбца и поэтому необязательно \|?

0 голосов
/ 07 июня 2018

Задание для awk:

awk -F '|' 'NR==2{print $3}' file

или

awk -F '|' -v row=2 -v col=3 'NR==row{print $col}' file

Вывод:

7
...