Как удалить пространство awk при печати со значениями - PullRequest
1 голос
/ 01 мая 2020

У меня есть test.csv

#cat test.csv
a.b.c.d
a.b
a.b.c
a-a.b.c          
a-a.b

(1) Я пытаюсь напечатать все значения после 1-й точки и (2) последняя точка не должна быть напечатана.

Я пытаюсь ниже, но это дает пробелы, фактический файл составляет около 1 миллиарда записей, любая идея, как я могу печатать без точки,

#cat test.csv | awk -F. '{print $2,".",$3}' 
b . c
b . 
b . c
b . c
b . 

Желаемый вывод

b.c.d
b
b.c
b.c          
b

Ответы [ 3 ]

3 голосов
/ 01 мая 2020

Пробелы в вашем выводе, потому что вы говорите awk, чтобы добавить пробелы. Каждый , в операторе print указывает, что awk добавляет значение переменной OFS (по умолчанию один пустой символ) в эту позицию в выводе. Вместо:

awk -F. '{print $2,".",$3}'

Попробуйте выполнить одно из следующих действий:

awk -F. '{print $2"."$3}'
awk 'BEGIN{FS=OFS="."} {print $2,$3}'

Чтобы получить желаемый результат с помощью awk, вы можете получить:

awk '{sub(/[^.]*\./,"")}1'

но я ' Очень рекомендую использовать инструмент, предназначенный для этой задачи, вырезать:

cut -d'.' -f2-
2 голосов
/ 01 мая 2020
$ sed 's|[^.]*\.||' test.csv
b.c.d
b
b.c
b.c
b

[^.] означает что угодно, кроме символа .. \. - это символ . (необходимо экранировать, потому что он имеет особое значение в регулярных выражениях).

2 голосов
/ 01 мая 2020

Не могли бы вы попробовать следующие, написанные и протестированные с показанными образцами.

awk 'BEGIN{FS=OFS="."} NF>=3{print $2,$3;next} NF==2{print $2}' Input_file

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

awk '                ##Starting awk program from here.
BEGIN{               ##Starting BEGIN section of this awk program from here.
  FS=OFS="."         ##Setting FS and OFS as DOT(.) here.
}
NF>=3{               ##Checking condition if number of fields greater than 3 then do following.
  print $2,$3        ##Printing 2nd and 3rd field values here.
  next               ##next will skip all further statements from here.
}
NF<=2{               ##Checking if number of fields is lesser than 2 then do following.
  print $2           ##Printing 2nd field here.
}
' Input_file         ##Mentioning Input_file name here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...