Необходимо добавить строку к столбцу и добавить к нему еще один столбец. - PullRequest
1 голос
/ 23 января 2020

У меня есть файл с 2 строками

123|456|789
abc|123|891

Мне нужно вывести, как показано ниже. По сути, я хочу добавить строку «xyz» в столбец 1 и добавить «xyz» в качестве нового столбца 2

xyz-123|xyz|456|789
xyz-abc|xyz|123|891

Это то, что я использовал

awk 'BEGIN{FS=OFS="fs-"$1}{print value OFS $0}' /tmp/b.log

Я получаю

xyz-123|456|789
xyz-abc|123|891

Я пытался

awk 'BEGIN{FS=OFS="fs-"$1}{print value OFS $0}' /tmp/b.log|awk -F" " '{$2="fs" $0;}1' OFS=" "

Ответы [ 4 ]

2 голосов
/ 23 января 2020

В дополнение к подходу обновления полей в awk ($ 1, $ 2 ...) мы также можем использовать подстановку для выполнения работы:

 sed 's/^[^|]*/xyz-&|xyz/' file

Если awk является обязательным:

awk '1+sub(/^[^|]*/, "xyz-&|xyz")' file

Оба однострочника дают ожидаемый результат.

2 голосов
/ 23 января 2020

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

awk 'BEGIN{FS=OFS="|"} {$1="xyz-"$1;$2="xyz" OFS $2} 1' Input_file

ИЛИ согласно комментарию @Corentin Limier:

awk 'BEGIN{FS=OFS="|"} {$1="xyz-" $1 OFS "xyz"} 1' Input_file

Вывод будет следующим.

xyz-123|xyz|456|789
xyz-abc|xyz|123|891
1 голос
/ 23 января 2020

Я бы использовал sed вместо awk следующим образом:

sed -e 's/^/xyz-/' -e 's/|/|xyz|/' Input_file

Это добавляет xyz- в начале каждой строки и меняет первую | в |xyz|

0 голосов
/ 23 января 2020

Еще одно небольшое изменение sed:

sed 's/^/xyz-/;s/|/&xyz&/' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...