AWK - OFS не работает с набором символов FS - PullRequest
0 голосов
/ 27 апреля 2019

Есть ли заклинание, что любой, кто использует awk, потерпит неудачу с OFS хотя бы один раз?

У меня есть следующий файл:

someone.txt

LN_A,FN_A<aa@xyz.com>;
LN_B,FN_B<bb@xyz.com>;

И мне нужно:

FN_A,LN_A,aa
FN_B,LN_B,bb   

Первоначально я попробовал следующее с приведенным ниже выводом:

awk -F'[,<@]' -v OFS=',' '{print $2 $1 $3}' someone.txt

FN_ALN_Aaa
FN_BLN_Bbb

Проведя некоторые исследования, я обнаружил, что иногда необходимо восстановить запись.Итак, я попробовал следующее, предполагая, что изменение NF восстановит запись.

awk -F'[,<@]' -v OFS=',' 'NF=3 {print $2 $1 $3}' someone.txt

FN_ALN_Aaa
FN_BLN_Bbb

Затем я попробовал это:

awk -F'[,<@]' -v OFS=',' 'NF=3; {print $2 $1 $3}' someone.txt
LN_A,FN_A,aa
FN_ALN_Aaa
LN_B,FN_B,bb
FN_BLN_Bbb

Затем, чтобы восстановить запись, все еще не повезло:

awk -F'[,<@]' -v OFS=',' '{$1=$1} {print $2 $1 $3}' someone.txt

FN_ALN_Aaa
FN_BLN_Bbb

Этот работал, но не так, как ожидалось:

awk -F'[,<@]' -v OFS=',' '{$1=$1} {print $0}' someone.txt

LN_A,FN_A,aa,xyz.com>;
LN_B,FN_B,bb,xyz.com>;

Наконец, мне удалось выполнить следующее:

awk -F'[,<@]' '{print $2 "," $1 "," $3}' someone.txt

FN_A,LN_A,aa
FN_B,LN_B,bb

PS:

  1. Я знаю, что в одной строке много вопросов, но я не считаю это дубликатом, поскольку он не работает - по крайней мере, для меня.: -)
  2. Я использую GNU Awk 3.1.7

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Если вы в порядке с sed, не могли бы вы попробовать (написано в соответствии с вашими показанными образцами). Использование способности sed для сохранения сопоставленного регулярного выражения в памяти и использование его при замене раздела sed, поскольку sed основан на шаблоне s/old/new.

sed 's/\([^,]*\),\([^<]*\)<\([^@]*\)\(.*\)/\2,\1,\3/'  Input_file
1 голос
/ 27 апреля 2019

OFS генерируется, когда print ест необработанную (не заключенную в кавычки) запятую

Я бы сделал это:

$ awk -F'[,<@]' -v OFS=, '{print $2,$1,$3}' someone.txt

FN_A,LN_A,aa
FN_B,LN_B,bb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...