我目前正在撰寫一個腳本,它應該接收一個標準輸入,并輸出該目錄中檔案數量最多的用戶。
到目前為止,我已經寫好了這個:
while read DIRNAME
do
ls -l $DIRNAME | awk 'NR>1 {print $4}'/span> | uniq -c
done
而這是我為一個實體輸入/etc時得到的輸出:
26 root
1 浸入
8根
1 lp
35 根
2 陰影
81根
1 浸漬
27根
2個影子
42根
現在顯然根檔案夾在這種情況下獲勝,但我不想只輸出這個,我還想對檔案數量進行加總,只輸出檔案數量最多的用戶。
進入/etc的預期輸出:
root
是否有一個簡單的方法來過濾我現在得到的輸出,以便以某種方式存盤具有最高和的用戶?
uj5u.com熱心網友回復:
ls -l /etc | awk 'BEGIN{FS=OFS=" "}{a[4] =1}END{ for (i in a) print a[i], i}' | sort -g -r | head -n 1 | cut -d' ' -f2
這個片段回傳/etc目錄中檔案數量最多的組。
它的作用是:
ls -l /etc以長的形式列出/etc中的所有檔案。awk 'BEGIN{FS=OFS=" "}{a[$4] =1}END{ for (i in a) print a[i],i}'計算第四列中唯一單詞的出現次數,并在該單詞后面列印出數字。sort -g -r根據數字對輸出進行降序排序。head -n 1取第一行 。
cut -d' ' -f2取第二列,而分隔符是一個空白。
注意:在你的問題中,你說你想要擁有最高數量檔案的用戶,但在你的代碼中,你指的是第四列,也就是組。我的代碼遵循你的代碼,在第4列上進行分組。如果你希望按用戶而不是組進行分組,請將{a[4] =1}改為{a[3] =1}。
uj5u.com熱心網友回復:
沒有不可靠的決議ls的輸出:
read -r dirname
# List user owner of files in dirname
stat -c '%U' "$dirname/"|
# 按名稱對用戶串列進行排序。
排序 |
# 計算用戶的出現次數。
uniq -c
# 按出現次數較多的數字排序。
# (第一列數字倒序)。
排序 -k1nr |
# 僅獲得第一行
head -n1 |
# 只保留從第9個字符開始,以獲得用戶名和丟棄計數
cut -c9-
uj5u.com熱心網友回復:
我有一個awk腳本來讀取標準輸入(或命令列檔案),并對唯一的名字進行匯總。
夏日:
awk '
{ sum[ $2 ] = $1 }
END {
for ( v in sum ) {
print v, sum[v]
}
}
' "$@"
假設我們使用你的/etc的例子:
ls -l /etc | summer
產生:
0
dip 2
影子 4
根219
lp 1
我喜歡保持實用程式的通用性,這樣我就可以為其他目的重復使用它們。 現在你只需使用sort和head來獲得夏天的最大結果輸出:
ls -l /etc | summer | sort -r -k2,2 -n | head -1 | cut -f1 -d' '/span>
產生:
root
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/308100.html
標籤:
上一篇:Terraform。需要將一個bash腳本傳遞給3個不同的Launch模板的userdata
下一篇:一個程序的孫子和曾孫子
