範例:我有a.txt
包含以下內容的文件:
aunt bear bear true
我還有一個b.txt
包含以下內容的文件:
tru tru high
我想要的最終結果是:
for a.txt : bear x 2
for b.txt : tru x 2
到目前為止,我只能想到這個:
cut -d ' ' -f1 file.txt | sort | uniq -c | head -1
我完全沒主意了
需要對文件進行排序;說明:引入檔案 c.txt b.txt y.txt 時,b 的內容應在前,y 的內容在後
答案1
這是一種簡單、快速的方法,適用於任意檔案名稱和檔案內容:
$ for file in a.txt b.txt ; do
printf 'for %s : %s\n' "$file" "$(tr ' ' '\n' < "$file" | sort | uniq -dc)";
done
for a.txt : 2 bear
for b.txt : 2 tru
或者,如果你確實需要確切地您顯示的格式:
$ for file in a.txt b.txt ; do
printf 'for %s : %s x %s\n' "$file" \
$(tr ' ' '\n' < "$file" | sort | uniq -dc | awk '{print $2,$1}');
done
for a.txt : bear x 2
for b.txt : tru x 2
答案2
$ for i in $(cat a.txt); do echo $i; done | sort | uniq -c | sort -g | tail -1
2 bear
腳本:
$ cat topword.sh
#!/bin/bash
FILENAMES=$@
for file in $@; do
printf "$file:"
cat $file | tr ' ' '\n' | sort | uniq -c | sort -g | tail -1
done
輸出:
$ bash topword.sh a.txt b.txt
a.txt: 2 bear
b.txt: 2 tru
現在,您的任務是:根據我給您的草稿製作一個美觀且易於閱讀的腳本;)
答案3
一個簡單的 awk 指令就能發揮作用
第一步,因為我們需要計算特定單字在文件中出現的次數
步驟1:根據輸入檔建立新的輸入文件
cat input file |sed -r "s/\s+/\n/g" >inputfile_final.txt
第 2 步:現在帶有關聯數組的簡單 awk 命令將發揮作用
awk '{a[$1]++}END{for(x in a){print FILENAME, x,a[x]}}' inputfile_final.txt | sort -k3 -nr| sed -n '1p'| awk '{print "for" " " $1 " " ":" $2 " " "x" " " $NF}'
輸出
for inputfile_final.txt :bear x 2
Note: I have done for 1 file same method we can follow for remaining files too