Bash和Awk:按行

时间:2017-03-24 19:32:48

标签: bash awk

我有一个文件myinputfile.txt,如下所示:

2.34 1.25 ./RUN1 ./RUN1/mod/file1.csv
3.34 1.25 ./RUN1 ./RUN1/mod/file2.csv
1.32 1.25 ./RUN2 ./RUN2/mod/file1.csv
4.35 1.25 ./RUN2 ./RUN2/mod/file2.csv

我想要一个新文件,其中包含每个值RUN*的最大值为第1列的行。新文件(myresultsfile.txt)的所需内容:

3.34 1.25 ./RUN1 ./RUN1/mod/file2.csv
4.35 1.25 ./RUN2 ./RUN2/mod/file2.csv

我有一个脚本,主要是让我在那里,但不会把事情放在新线上:

#!/bin/bash
resultsfile="myresults.txt"
inputfile="myinputfile.txt"
res1=$(sort -k3,3r $inputfile | awk '{split($nF,d,"/")} !a[d[3]]++')
echo $res1 >> $resultsfile

2 个答案:

答案 0 :(得分:1)

sort辅助awk

$ sort -k1nr file | awk '!a[$3]++'

3.34 1.25 ./RUN1 ./RUN1/mod/file2.csv
4.35 1.25 ./RUN2 ./RUN2/mod/file2.csv

只需重定向到新文件

$ sort -k1nr file | awk '!a[$3]++' > sorted_file

答案 1 :(得分:0)

您可以像这样使用awk

awk '$1 > max[$3] { max[$3] = $1; rec[$3] = $0 } END { for (i in rec) print rec[i] }' file

3.34 1.25 ./RUN1 ./RUN1/mod/file2.csv
4.35 1.25 ./RUN2 ./RUN2/mod/file2.csv
  • max是一个关联数组,它将第一列的最大值保存为第3列
  • rec是一个关联数组,它按键作为第3列保留整行