Необходимо удалить дубликаты строк, используя mawk (в частности) - PullRequest
0 голосов
/ 27 марта 2019

У меня есть команда gawk, которая отлично работает. Но у меня есть машина с установленным mawk, и когда я пытаюсь установить gawk, он жалуется на сломанные зависимости. Я хотел бы изменить эту строку на синтаксис mawk.

awk -F '[|]{3}' 'BEGIN {OFS="|||"} !seen[$4]++ {print $4,$7,$3,$5,$6,$8,$9,$10,$11}' $1

Входной файл: это файл с тремя разделителями

A|||B|||C|||D|||E|||F|||G|||H|||I|||J|||K||||L|||M|||N|||O|||P|||Q|||R|||S||||T|||U
1|||2|||3|||4|||5|||6|||7|||8|||9|||10|||11|||12|||13|||14|||15|||16|||17|||18|||19

1 Ответ

1 голос
/ 27 марта 2019

POSIX awk использует расширенные регулярные выражения, которые имеют возможность определять дублирование символов с помощью {m,n}

Когда за ERE, совпадающим с одним символом, или ERE, заключенным в скобки, следует интервальное выражение в формате {m}, {m,} или {m,n}, вместе с этим интервальным выражением оно должно совпадать с тем, что повторялось в последовательных вхождениях ERE будет соответствовать. Значения m и n являются десятичными целыми числами в диапазоне 0 <= m<= n<= {RE_DUP_MAX}, где m указывает точное или минимальное количество вхождений, а n указывает максимальное количество вхождений. Выражение {m} точно соответствует m вхождениям предыдущего ERE, {m,} соответствует по меньшей мере m вхождениям, а {m,n} соответствует любому числу вхождений между m и n включительно.

источник: Регулярные выражения POSIX

Этот метод дублирования, к сожалению, не поддерживается mawk, что можно прочитать из руководства (Раздел 3 Регулярные выражения) .

Таким образом, вместо определения разделителя полей FS с помощью -F '[|]{3}', вы должны использовать -F '[|][|][|]' или -F "\\|\\|\\|"

...