我有一個8列的文件,使用「|」作爲分隔符,我想計算第8列中詞語的出現頻率。我試過這樣的awkbash中文件列的頻率計數
awk -F '{print $8}' | sort | uniq -c $FILE
但我得到的是整個文件的打印,我不明白我做錯了什麼。
編輯:現在我得到打印的內容我想如下:
2307的Internet Explorer
369 Safari瀏覽器
2785鉻
316歌劇
4182火狐
但我不明白的地方這「1」 來自
我有一個8列的文件,使用「|」作爲分隔符,我想計算第8列中詞語的出現頻率。我試過這樣的awkbash中文件列的頻率計數
awk -F '{print $8}' | sort | uniq -c $FILE
但我得到的是整個文件的打印,我不明白我做錯了什麼。
編輯:現在我得到打印的內容我想如下:
2307的Internet Explorer
369 Safari瀏覽器
2785鉻
316歌劇
4182火狐
但我不明白的地方這「1」 來自
您只需awk
做到這一點:
awk -F '|' '{freq[$8]++} END{for (i in freq) print freq[i], i}' file
此AWK命令使用|
作爲分隔符,並使用與密鑰作爲$8
陣列seen
。當它發現一個密鑰$8
增加頻率(值)1
。 順便說一句,你需要在你的命令添加自定義分隔符|
和使用它像這樣:
awk -F '|' '{print $8}' file | sort | uniq -c
別的不說,你正在運行uniq
上$FILE
,而不是上運行$FILE
awk
和管道的結果進行排序,然後uniq的。你的意思是寫:
awk -F'|' '{print $8}' "$FILE" | sort | uniq -c
但所有你需要的是一個命令:
awk -F'|' '{cnt[$8]++} END{for (key in cnt) print cnt[key], key}' "$FILE"
WRT I can't understand where this "1" come from
- 你在輸入文件中有1空$ 8,也許是空白行。你可以找到它:
awk -F'|' '$8~/^[[:space:]]*$/{print NR, "$0=<"$0">, $8=<"$8">"}' "$FILE"
一個cut
基於答案,(加sed
的位用引號括項目,將更好地使空行可見):
cut -d'|' -f8 "$FILE" | sed 's/.*/"&"/' | sort | uniq -c
此打印我的不同列表中的事件,但我也想要它們出現在列中的次數。 – JimS
確定你可以看到'awk -F'|' '{print $ 2}'文件|排序| uniq -c「。 – anubhava
是的,我發現我的錯誤順序管道。非常感謝你! – JimS