AWKプログラムはMac OSXとLinuxディストリビューションでは異なると認識していますが、自家製のgawk
でも同じ結果が得られません。配列キーとその値を同じ行に出力するために、私のMac上でAWKスクリプトを動作させるために何を調整する必要があるのかを理解したいと思っています。ここでAWK Mac OSXアレイキーと配列値を同じ行に表示する方法
は私のawkのファイルがあります:
BEGIN { FS="," }
NR > 1 {
dupes[$3]++;
}
END {
OFS=" ";
for (key in dupes) {
if (dupes[key] > 1) {
print key, "occured", dupes[key], "times";
}
}
}
そして、ここではのtest.CSVファイル
test,something,target_column3
aaa,123,hi
sss,222,hello
ddd,333,hey
fff,444,hi
ggg,555,hi
jjj,888,goodbye
uuu,666,byebye
lll,777,hey
である私は、それはGNU Awkの4.0.1とUbuntuで同じように出力を表示します:
hey occured 2 times
hi occured 3 times
しかし、私のMac上でそれがgawk
バージョンGNU Awkの4.1.4、APIで出力:1.1(GNU MPFR 3.1.5、GNU MP 6.1.2):とき別の変数、dupes[key]
と一緒にそれはループのための私のkey
を印刷していない何らかの理由
occured 2 times
occured 3 times
。しかし、ライン上の唯一のものであればprint key
になります。
UPDATE:@ jasのコメントごとに、私は行末をチェックし、何らかの理由で私のCSVファイルにはCRLF
が含まれていました。また、以下のようなプリント値を追加すると、奇妙な出力が現れます。私の代わりに私が得る、すべての長さが1以下の文字の長であることを期待する:
...
NR > 1 {
print length($3);
dupes[$3]++;
}
...
3
6
4
3
3
8
7
4
occured 2 times
occured 3 times
マックOSX AWK(またはGAWK)が配列のキーと同じ行に配列値の両方を印刷することはできませんなぜ任意の理由?
これを再現できません。おそらくあなたの端末で何かをオフにする?出力をファイルにリダイレクトし、テキストエディタで表示してみてください。 – pvg
「再生できません」とは、/ usr/bin/awkとgawk 4.1.4(macports)で期待通りに動作することを意味します。 – pvg
ファイルに間違った行末があると、このようなことが起こる可能性があります。 $ 3の終わりに止まっている制御文字のように、カーソルを行頭に移動してから文字を書き続けます。 – jas