我有一个文件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
答案 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列保留整行