需要使用mawk删除重复的行(特别是)

问题描述 投票:-1回答: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
awk text-processing mawk
1个回答
1
投票

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

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

来源:POSIX Regular Expressions

遗憾的是,这种复制方法不受mawk的支持,因为可以从manual (Section 3 Regular Expressions)中读取。

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

© www.soinside.com 2019 - 2024. All rights reserved.