列1、2、3の最後の列の項目数に基づいてパイプで区切られたファイルを追加しようとしています。
頑張りましたawk '{ print $0 "|" ++count[$1,$2,$3] }'
ただし、すべての行の最後の列にのみ数値1を生成し、次のように追加のパイプを追加します。
123|456365|PASS|566563|Apple||1
123|456365|PASS|566563|Apple||1
123|456365|FAIL|34322|Apple1||1
123|456365|FAIL|35322|Apple2||1
誰かが私が以下で予想される結果を得るのを助けることができれば非常に役立ちます。
入力ファイル
123|456365|PASS|566563|Apple
123|456365|FAIL|34322|Apple1
123|456365|FAIL|35322|Apple2
123|456335|PASS|56655|Apple34
123|456335|FAIL|34325|Apple53
123|34343|PASS|35323|Apple1
123|34343|PASS|34342|Apple13
123|34343|PASS|343442|Apple13
期待される出力
123|456365|PASS|566563|Apple|1
123|456365|FAIL|34322|Apple1|1
123|456365|FAIL|35322|Apple2|2
123|456335|PASS|56655|Apple34|1
123|456335|FAIL|34325|Apple53|1
123|34343|PASS|35323|Apple1|1
123|34343|PASS|34342|Apple13|2
123|34343|PASS|343442|Apple13|3
答え1
フィールドセパレータが何であるかをawkに教えてください。
awk -F'|' -v OFS='|' '{ print $0, ++count[$1,$2,$3] }' infile
-F
入力フィールド区切り文字を定義し、代わりに出力フィールド区切り-v OFS
文字を定義します。BEGIN{ FS=OFS="|" }
たとえば、2 つを同時に使用できます。
awk 'BEGIN{ FS=OFS="|" } { print $0, ++count[$1,$2,$3] }' infile
答え2
Raku(以前のPerl_6)の使用
raku -ne ' state %seen; print($_, "|"); for $_.split("|").[0..2].join() { (++%seen{$_}).put };'
または
raku -ne ' state %seen; print($_, "|"); ( ++%seen{$_} ).put for .split("|").[0..2].join;'
入力例:
123|456365|PASS|566563|Apple
123|456365|FAIL|34322|Apple1
123|456365|FAIL|35322|Apple2
123|456335|PASS|56655|Apple34
123|456335|FAIL|34325|Apple53
123|34343|PASS|35323|Apple1
123|34343|PASS|34342|Apple13
123|34343|PASS|343442|Apple13
出力例:
123|456365|PASS|566563|Apple|1
123|456365|FAIL|34322|Apple1|1
123|456365|FAIL|35322|Apple2|2
123|456335|PASS|56655|Apple34|1
123|456335|FAIL|34325|Apple53|1
123|34343|PASS|35323|Apple1|1
123|34343|PASS|34342|Apple13|2
123|34343|PASS|343442|Apple13|3
上記は、Perlプログラミング言語ファミリーであるRakuで書かれたソリューションです。つまり、(行別、非自動印刷)フラグをraku
使用してコマンドラインから実行します。-ne
ハッシュ値は-dで始まる1行%seen
です。state
これにより、%seen
初期化が一度だけ許可されます。 2番目のステートメントでは、aが続く元の行|
はprint
-edです(改行文字なし)。 3番目のステートメントでは、最初の3つの列を開いてsplit
再|
編集し、得られた各値を使用して、一意join
の文字列値に基づいて++%seen{$_}
ハッシュ値を増やします。%seen
追加された価値はput
ソリューションを完成させることです。