2013-06-12 45 views
1

因此,我一直在這個自昨晚以來,我可以得到很多事情發生,只是不是我想要的。試圖獲取文件的最大行數與打印行號

我需要一個代碼來查找目錄中行數最多的文件,然後打印文件的名稱和文件的行數。

我可以得到整個目錄的行來打印,但似乎無法縮小領域可以這麼說。

任何幫助傻瓜的學習者?

wc -l $1/* 2>/dev/null 
    | grep -v ' total$' 
    | sort -n -k1 
    | tail -1l 

在另一個問題一些親的幫助之後,這是我得到了,但它返回他們,並且不打印的行數。

+1

,你能否告訴我們到目前爲止你已經嘗試了什麼? –

+0

對不起。 – Looking2learned

+0

btw,我剛試過你的解決方案'wc -l $ 1/* 2>/dev/null | grep -v'total $'| sort -n -k1 |尾巴-1'和它的作品。我不明白你在做錯什麼。 – zmo

回答

0

你可以試試:

wc -l $1/* | grep -v total | sort -g | tail -1 

實際上避免了grep的,這也將刪除含有 「總」 的文件:

wc -l $1/* | sort -rg | sed -n '2p' 
:在意見提出

for f in $1/*; do wc -l $f; done | sort -g | tail -1 

,甚至更好,

你甚至可以使它成爲一個功能:

function get_biggest_file() { 
    wc -l $* | sort -rg | sed -n '2p' 
} 

% ls -l 
... 0 Jun 12 17:33 a 
... 0 Jun 12 17:33 b 
... 0 Jun 12 17:33 c 
... 0 Jun 12 17:33 d 
... 25 Jun 12 17:33 total 
% get_biggest_file ./* 
5 total 

EDIT2:用我給的功能,你可以簡單地輸出你需要的東西如下:

get_biggest $1/* | awk '{print "The file \"" $2 "\" has the maximum number of lines: " $1}' 

編輯:如果你試圖寫函數因爲你已經在這個問題寫它,你應該在最後添加行連續字符,如下,或你的shell會認爲你想發出4個命令:

wc -l $1/* 2>/dev/null \ 
    | grep -v ' total$' \ 
    | sort -n -k1 \ 
    | tail -1l 
+1

你的第二種方式將需要爲每個文件調用一次'wc'。這個–'wc -l $ 1/* |怎麼樣? sort -rg | sed -n'2p''? – doubleDown

1

繼awk命令應該爲你做的工作,你能避免所有多餘的管道命令:

wc -l $1/* | awk '$2 != "total"{if($1>max){max=$1;fn=$2}} END{print max, fn}' 

UPDATE:爲了避免WC輸出的最後一行,這可能是更好的awk命令:

wc -l $1/* | awk '{arr[cnt++]=$0} END {for (i=0; i<length(arr)-1; i++) 
        {split(arr[i], a, " "); if(a[1]>max) {max=a[1]; fn=a[2]}} print max, fn}' 
+0

根據以下目錄,您的解決方案將無法工作:總共有多於所有其他文件的行,它只會輸出一個空行。 – zmo

+0

@zmo:謝謝,我編輯了它。 – anubhava

+0

現在它不會報告行數最多的文件名爲total的文件 – iruvar