如何使用AWK打印最高号码的行?

我有个问题。 假设我转储一个文件,并为foo做一个grep,结果如下:

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

等等。

我想要的是试图提取最大的数字的foo名称。 例如在这种情况下,最大的数字是1222,我期望的结果是foo name 3

有没有简单的方法使用awksed来实现? 而不是逐行拉出数字并循环find最大的数字?

这是我该怎么做的。 我只是在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 cat somefile | ./mycommand

awk代码:

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

 $ cat文件
 Foo-bar-120:'foo name 1'
 Foo-bar-130:'foo name 2'
 Foo-bar-1222:'foo name 3'

 $ awk -F [ - :]'$ 3> a {a = $ 3;  b = $ 4} END {print b}'文件
 'foo名字3'

假设行格式如“2”之前的连字符所示:

 cut -d- -f3- | sort -rn | sed '1{s/^[0-9]\+://; q}' 

这对你好吗?

 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我喜欢字段分隔符[:-]

 $ awk '{gsub(/.*:.|.$/,"")} (NR==1)||($NF>max){max=$NF; val=$0} END{print val}' file foo name 3 

你不需要使用grep 。 你可以直接在你的文件中使用awk

 awk -F"[-:]" '/Foo/ && $3>prev{val=$NF;prev=$3}END{print val}' file