[英]Bash and Awk: write results of sort to a new file line by line
我有一个文件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
与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
您可以这样使用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列
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.