2016-09-09 9 views
0

私の同僚は今日grepという面白い問題を抱えていました。 彼女はそこからcurlを使ってウェブページを引っ張っていると思われ、grepを使ってアンカーを引っ張っているようなbashスクリプトを作っています。Grep出力から最大のインデックスを取得するパターン

として彼女の出力例が出て来ている:これはその最初の数値を見て、その「順序」でそれらを置くことによってgrep種類として期待されている

file-1  
    file-10 
    file-2 
    file-20 
    file-3 
    file-4 

彼女はfor-loopを出力から最新のものにすることになりました。しかし、それは私に不思議に思った。

上記の例では、file-20をどのようにして1行のコマンドで取得しますか

。私はsortawkを試しました。しかし、作業を取得できませんでした:/

+1

はなぜソートすることをgrepするのでしょうか?出力はgrepがマッチする順序でなければなりません。 –

答えて

2

あなたがする必要がある:

  • 使用数値ソート:最後の行を取得し、カラム
  • を指定するには、列セパレータを指定する-tを使用し、-k:数値列によってsort
  • ソート用-nフラグtail -n1

このように:

sort -n -t- -k2 input | tail -n1 
+0

が一言でわかります。説明にも感謝します。 –

1

あなたは単一のコマンドでこれを行うことができますawkの使い方:

awk -F- '$2>max{max=$2; s=$0} END{print s}' file 

file-20 

我々はハイフンで各ラインを分割し、第二フィールドを調べます。変数maxを最大値を維持するための実行値として保持し、次に高い値を$2に取得します。 maxを設定するたびに、フルラインを変数sに保存します。 ENDセクションでは、変数sを印刷します。

+1

私はこの1つが好きで、あなたがそれを説明したことが大好きです。それがより単純で、彼女がその1つを使用するのが好きに終わったので、ちょうど他のものを受け入れる必要がありました。私はawkで最初に自分自身にもっと感謝しなければならないので、ありがとう。 –

+0

*シンプル*は実際に主観的な言葉です。 'awk'は単一のコマンドで2つのコマンド、すなわち' sort + tail'を実行します。入力ファイルが大きい場合、 'sort'もかなり遅くなります。あなたの右は – anubhava

+0

です。私はあなたがgrep、sort、tail/headであることを学んだ最初のコマンドのように、より単純なものを意味しました。awkは何かを学んでいるので、他のものは精神的に使うのが一番簡単でした。 awkは大きなファイルの方が良いということを心に留めておいてください! –

1

あなたは-によってソートするsortを使用することができます最初のものを得るために、数値的に2番目のフィールドを分離し、head -1

sort -t'-' -k2,2rn | head -1 

例:

% cat file.txt       
file-1  
file-10 
file-2 
file-20 
file-3 
file-4 

% sort -t'-' -k2,2rn file.txt   
file-20 
file-10 
file-4 
file-3 
file-2 
file-1  

% sort -t'-' -k2,2rn file.txt | head -1 
file-20 
+0

同じものがちょうど代わりに尾を使用しました。 –

+1

@ KyleCalica-St '-k'オプションの後ろの部分に違いがあることに注意してください。実際に' -n'(数値)、 '-r'(逆)などの操作を関連するオプションを '-k'でタックすることで行全体を表示します。また、後に続くフィールドがたくさんある場合には、 '-k'を使用している間に開始フィールドと終了フィールドについて常に言及する必要があります。 – heemayl

関連する問題