Предположим, что у меня есть такой вывод строк:
First name, Last name, 123456789(9 digits)
GPA
Class
Major
University
Как я могу написать какой-нибудь код, чтобы распечатать первые 3 строки и сохранить только идентификационный номер в первой строке?
Я пытался использовать головку
, grep
и cut
, но не смог этого сделать.
Вы можете использовать awk, чтобы напечатать последнее поле, разделенное запятыми-пробелами:
$ cat file
First name, Last name, 123456789
GPA
Class
Major
University
$ awk -F', ' 'NR<4 {print $NF}' file
123456789
GPA
Class
или sed, чтобы заменить самую длинную строку до запятой:
$ sed -n '1,3{s/.*, //; p}' file
123456789
GPA
Class
Простое if -else также работает с awk
. Далее мы используем запятую в качестве разделителя полей ( -F ','
) и печатаем третье поле ( $ 3
), если мы находимся на первой строке ( NR == 1
), иначе будет напечатана вся строка ( $ 0
) для первых 3 строк ( NR <4
):
awk -F', ' '{if (NR == 1) print $3; else if (NR < 4) print $0}' file
Если в вашем файле много таких записей вместо одной, попробуйте :
cat file |tr "," "\n" |grep "[0-9]\{9\}" -A3