Как удалить часть строки, а остальное оставить, используя Bash?

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

First name, Last name, 123456789(9 digits)
GPA
Class
Major
University

Как я могу написать какой-нибудь код, чтобы распечатать первые 3 строки и сохранить только идентификационный номер в первой строке?

Я пытался использовать головку , grep и cut, но не смог этого сделать.

0
задан 18 April 2021 в 22:24

3 ответа

Вы можете использовать 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
3
ответ дан 23 April 2021 в 23:21

Простое 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
2
ответ дан 23 April 2021 в 23:21

Если в вашем файле много таких записей вместо одной, попробуйте :

cat file |tr "," "\n" |grep "[0-9]\{9\}" -A3
1
ответ дан 23 April 2021 в 23:21

Другие вопросы по тегам:

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