ABU*_*HIM 30 shell scripting shell-script
如何从第 1 列中找到最大值并从包含 n 条记录的文件中回显相应的路径位置。
$ cat version.log
112030 /opt/oracle/app/oracle/product/11.2.0
121010 /opt/oracle/app/oracle/product/12.1.0
Run Code Online (Sandbox Code Playgroud)
预期输出:
/opt/oracle/app/oracle/product/12.1.0
Run Code Online (Sandbox Code Playgroud)
Ram*_*esh 33
这应该有效:
awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print want} ' version.log
Run Code Online (Sandbox Code Playgroud)
在-v max=0将变量max到0,那么,对于每一行,第一场进行比较的电流值max。如果大于,max则设置为第一个字段的值并want设置为当前行。当程序处理完整个文件时,want会打印的当前值。
编辑
我没有awk更早地测试解决方案,提供它真的是我的错。无论如何,答案的编辑版本应该有效(感谢 terdon 修复它),我也测试了以下内容。
sort -nrk1,1 filename | head -1 | cut -d ' ' -f3
Run Code Online (Sandbox Code Playgroud)
我sort在第一个领域,
现在,在排序之后,我将输出管道并得到第一个结果,这将给我结果中 column1 的数值最高值。
现在,我终于cut用指定为空格的分隔符将其通过管道传输,并打印-f3了预期的输出。
测试
cat filename
112030 /opt/oracle/app/oracle/product/11.2.0
121010 /opt/oracle/app/oracle/product/12.1.0
2312 /hello/some/other/path
3423232 /this/is/really/big/number
342 /ok/not/the/maximum/number
9999899 /Max/number
9767 /average/number
Run Code Online (Sandbox Code Playgroud)
现在,在我为上述输入运行上述命令后,我得到的输出为,
/Max/number
Run Code Online (Sandbox Code Playgroud)
你可以用AWK.
$ awk '{if(max<$1){max=$1;line=$2}}END{print line}' file
/opt/oracle/app/oracle/product/12.1.0
Run Code Online (Sandbox Code Playgroud)
这里每行的第一列与变量max(最初为 0)进行比较。如果第一列有一个很大的值,max那么第二列存储在变量中line,这对文件的每一行都会继续。
在文件END规则的末尾执行以打印line变量。
awk '$1 > max { max = $1; output = $2 } END { print output }' version.log
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93324 次 |
| 最近记录: |