2016-10-19 61 views
2

我有一個排序類似如下的文件:如何使用awk列出特定行?

2 Good 
2 Hello 
3 Goodbye 
3 Begin 
3 Yes 
3 No 

我想在文件中搜索最高值,顯示的是一個行?

3 Goodbye 
3 begin 
3 Yes 
3 No 

我該怎麼做?

+1

多少行,你期待? (100K與1K不一樣)是一個命令嗎?或可能將其包裝在腳本中? – nabeel

回答

0

cat file.txt | sort -r | awk'{if($ 1> = prev){print $ 0;上一頁= $ 1}}」

3 Yes 
3 No 
3 Goodbye 
3 Begin 

假設file.txt的包含

2 Good 
2 Hello 
3 Goodbye 
3 Begin 
3 Yes 
3 No 
+0

非常感謝,這正是我需要的! – edgevnv

+0

除非你有一個穩定的排序,這可能會改變元素的順序... – karakfa

0

首先獲取文件中的最高值到變量中。考慮到文件已經被排序,拾取文件中的最後一行。然後用awk解析出數字。

highest=`tail -1 file.list|awk '{print $1}'` 

然後使用該值grep文件。

grep "^${highest} " file.list 
0

這應該做的工作。我只使用awk如問題需要:

awk 'BEGIN {v=0} {l = l "\n" $0} {if ($1>v) {l = $0; v = $1}} END {print l}' file.txt 

可變v被初始化爲0。然後在每行被讀出(在文件解析之前),並保存在存儲器中;如果第一個字段($1)大於v,則更新v並清空l中的內容。最後,打印l的內容。

+0

但這隻會打印第一行「3 Goodbye」 – nabeel

+0

@nabeel對。更新。 –

+0

'v = 0'不是明確需要的,它是默認值。 – karakfa

0

這比您想象的要容易。

awk '/^3/' file 

3 Goodbye 
3 Begin 
3 Yes 
3 No 
2

awk來救援!

$ awk 'FNR==NR{if(max<$1) max=$1; next} $1==max' file{,} 

3 Goodbye 
3 Begin 
3 Yes 
3 No 

雙重通過,找到最大值並過濾掉其餘部分。