我目前正在使用awk以逗号作为分隔符来复制函数uniq -c
。
这给出了正确的输出:
$ cut --delimiter=, -s -f2 wordlist.csv | awk '{ cnts[$0] += 1 } END { for (v in cnts) print cnts[v], v}' OFS="," | head
2,laecherlichen
111,doctrine
1,cremonas
1,embedding
1,conincks
2,similiter
1,mitgesellen
1,hysnelement
1,geringem
1,aquarian
但是,如果我将awk命令print cnts[v], v
反转为print v, cnts[v]
,我会收到混乱的输出:
$ cut --delimiter=, -s -f2 wordlist.csv | awk '{ cnts[$0] += 1 } END { for (v in cnts) print v, cnts[v]}' OFS="," | head
,2echerlichen
,111rine
,1emonas
,1bedding
,1nincks
,2militer
,1tgesellen
,1snelement
,1ringem
,1uarian
我对此输出感到困惑,因为我期待像word,1
这样的输出。有什么问题?
答案 0 :(得分:4)
很可能在行尾\r
之前有DOS换行符,即\n
。您可以使用RS
中的awk
变量忽略此项:
cut --delimiter=, -s -f2 wordlist.csv | awk -v RS='\r|\n' '{
cnts[$0] += 1 } END { for (v in cnts) print cnts[v], v}' OFS="," | head
但是,如果您展示自己的csv文件,我相信即使cut
也可以从上述命令中移除head
。
PS:感谢@Bammar你也可以运行:
dos2unix file.csv
将您的csv文件转换为与Unix兼容的文件。