4

質問があります。ファイルをダンプし、foo に対して grep を実行すると、次のような結果が得られると仮定します。

Foo-bar-120:'foo 名 1'
Foo-bar-130:'foo 名 2'
Foo-bar-1222:'foo 名 3'

等。

私が望むのは、最大数の foo 名を抽出しようとすることだけです。たとえば、この場合、最大数は 1222 で、期待される結果はfoo name 3

これを達成するために awk と sed を使用する簡単な方法はありますか? 数値を 1 行ずつ取り出してループして最大の数値を見つけるのではなく、

4

6 に答える 6

3

のコード:

awk -F[-:] '$3>a {a=$3; b=$4} END {print b}' file

$ 猫ファイル
Foo-bar-120:'foo 名 1'
Foo-bar-130:'foo 名 2'
Foo-bar-1222:'foo 名 3'

$ awk -F[-:] '$3>a {a=$3; b=$4} END {print b}' ファイル
「フーネーム3」
于 2013-07-24T21:26:50.510 に答える
1

Assuming the line format is as shown with 2 hyphens before "the number":

cut -d- -f3- | sort -rn | sed '1{s/^[0-9]\+://; q}'
于 2013-07-24T21:10:19.743 に答える
1

これでよろしいですか?

awk -F'[:-]' '{n=$(NF-1);if(n>m){v=$NF;m=n}}END{print v}'

あなたのデータで:

kent$  echo "Foo-bar-120:’foo name 1’
Foo-bar-130:’foo name 2’
Foo-bar-1222:’foo name 3’"|awk -F'[:-]' '{n=$(NF-1);if(n>m){v=$NF;m=n}}END{print v}'
’foo name 3’

PS私はフィールドセパレーターが好きです[:-]

于 2013-07-24T21:10:49.870 に答える
1

これが私がそれを行う方法です。Cygwinでこれをテストしました。願わくば、Linux でも動作することを願っています。これを次のようなファイルに入れますmycommand

#!/usr/bin/awk -f

BEGIN {
        FS="-";
        max = 0;
        maxString = "";
}

{
        num = $3 + 0; # convert string to int
        if (num > max) {
                max = num;
                split($3, arr, "'");
                maxString = arr[2];
        }
}

END {
        print maxString;
}

次に、ファイルを実行可能にします ( chmod 755 mycommand)。これで、たとえばcat somefile | ./mycommand.

于 2013-07-24T21:11:19.640 に答える