-1

我有一个运行良好的 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
4

1 回答 1

1

POSIX awk 使用扩展的正则表达式,可以通过以下方式定义字符重复{m,n}

当 ERE 匹配单个字符或括在括号中的 ERE 后跟格式为 、 或 的区间表达式时{m}{m,}连同{m,n}该区间表达式,它将匹配 ERE 的重复连续出现将匹配的内容。和 n的值m是 范围内的十进制整数0 <= m<= n<= {RE_DUP_MAX},其中m指定准确或最小出现次数,并n指定最大出现次数。该表达式{m}完全m匹配前面 ERE 的出现,{m,}匹配至少 m 个出现,并{m,n}匹配 和 之间的任意数量的出现,包括mn

来源:POSIX 正则表达式

不幸的是,mawk不支持这种复制方法,可以从手册(第 3 节正则表达式)中阅读。

因此,您不必使用 定义字段分隔符FS-F '[|]{3}'而必须使用-F '[|][|][|]'or-F "\\|\\|\\|"

于 2019-03-27T10:03:31.887 回答