bash когда вы найдете два столбца, удалите первый столбец в bash - PullRequest
0 голосов
/ 04 марта 2020

У меня есть два столбца, как показано ниже.

0:0:36 hostname-x.y.com:1212/dbname
server.y.com:1012/bname
0:0:9 commom.y.com:9312/xname
windows.y.com:1052/wname

Желаемый вывод должен быть следующим:

hostname-x.y.com:1212/dbname
server.y.com:1012/bname
commom.y.com:9312/xname
windows.y.com:1052/wname

По сути, когда он находит два столбца, он должен пропустить первый столбец. У меня почти 10 тысяч строк. Любые предложения будут отличной помощью.

Ответы [ 4 ]

2 голосов
/ 04 марта 2020

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

awk '{print $NF}' filename

, который просто напечатает последнее поле в каждой строке.

Пример использования / вывода

с вашим входным файлом в file:

$ awk '{print $NF}' file
hostname-x.y.com:1212/dbname
server.y.com:1012/bname
commom.y.com:9312/xname
windows.y.com:1052/wname
1 голос
/ 04 марта 2020

Посмотрев образец ожидаемого результата (добавив больше общего c решения), если я получу его правильно (вы хотите напечатать данные после цифр), не могли бы вы попробовать следующее.

awk 'match($0,/[0-9]+:[0-9]+:[0-9]+ +/){print substr($0,RSTART+RLENGTH);next} 1' Input_file

Объяснение: Добавление подробного объяснения для вышеуказанного кода.

awk '                                    ##Starting awk program from here.
match($0,/[0-9]+:[0-9]+:[0-9]+ +/){      ##Using match function which matches regex of digits colon digits colon digits then space in line.
  print substr($0,RSTART+RLENGTH)        ##If a match is found then it should print sub-string of line starting from RSTART till RLENGTH.
  next                                   ##next will skip all further statements from here.
}
1                                        ##1 will print edited/non-edited lines here.
'  Input_file                            ##Mentioning Input_file name here.
0 голосов
/ 04 марта 2020

Используйте сокращение, чтобы взять второе поле, с "" в качестве разделителя. Если разделитель не найден, в выводе дается вся строка, как указано в разделе справки опции -f (cut --help)

-f, --fields=LIST       select only these fields;  also print any line
                            that contains no delimiter character, unless
                            the -s option is specified

Команда должна быть

cut -f2 -d" " yourfile

Демо:

root@a036fb1c94fa:~# cat yourfile
0:0:36 hostname-x.y.com:1212/dbname
server.y.com:1012/bname
0:0:9 commom.y.com:9312/xname
windows.y.com:1052/wname 

root@a036fb1c94fa:~# cut -f2 -d" " yourfile
hostname-x.y.com:1212/dbname
server.y.com:1012/bname
commom.y.com:9312/xname
windows.y.com:1052/wname
0 голосов
/ 04 марта 2020
sed 's/.* //g' < input_file

Демо


:>cat test.txt
0:0:36 hostname-x.y.com:1212/dbname
server.y.com:1012/bname
0:0:9 commom.y.com:9312/xname
windows.y.com:1052/wname
:>sed 's/.* //g' test.txt
hostname-x.y.com:1212/dbname
server.y.com:1012/bname
commom.y.com:9312/xname
windows.y.com:1052/wname
:>



...