-1

正常に動作する gawk コマンドがあります。しかし、mawk がインストールされたマシンがあり、gawk をインストールしようとすると、依存関係が壊れているというエラーが表示されます。この行を mawk 構文に変更したいと思います。

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

入力ファイル: 3 つのパイプで区切られたファイルです

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、範囲 の 10 進整数です0 <= m<= n<= {RE_DUP_MAX}。ここでm、正確な発生数または最小発生数をn指定し、最大発生数を指定します。式は、前の ERE の出現に{m}正確に一致し、少なくとも m 回の出現に一致し、およびから までの任意の数の出現に一致します。m{m,}{m,n}mn

ソース: POSIX 正規表現

この複製方法は、マニュアル (セクション 3 正規表現)から読み取れるように、残念ながら mawk ではサポートされていません

FSしたがって、 を使用してフィールド区切り記号を定義する代わりに、または-F '[|]{3}'を使用する必要があります。-F '[|][|][|]'-F "\\|\\|\\|"

于 2019-03-27T10:03:31.887 に答える