繁体   English   中英

Bash和Awk:将排序结果逐行写入新文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM