linux - 使用 foreach 循环时不会出现列的最大值

标签 linux foreach grep csh

我有两个文件,pin 和 Output.csv。

文件“pins”包含以下信息

A
A[0]
A[1]
B[0]
B[1]
C

文件“Output.csv”包含以下信息

A,10
A[0],9
A[0],11
A[1],8
B[0],19
B[1],2
B[1],60
C,12

我写了一个 shell 脚本,得到这样的输出 (Final_output.csv)

A,10
A[0],11
A[1],8
B[0],19
B[1],60
C,12 
foreach line1 (`cat pins`)
set final_value = `grep -w $line1 Output.csv | cut -d, -f2 | sort | tail -1`
echo "$line1,$final_value" >> Final_output.csv
end 

但我只得到 A 和 C 的值。对于 A[0]、A[1]、B[0]、B[1] 值不会出现。代码有什么问题?

最佳答案

您可以使用 join 仅使用 pins 文件中的键过滤输出文件,然后使用 awk 查找最大值:

join -t, pins Output.csv | awk -F, '!($1 in max) || $2 > max[$1] {max[$1] = $2} END {for (key in max) print key FS max[key]}'
A,10
C,12
A[0],11
A[1],8
B[0],19
B[1],60

输出将是无序的。

或者全部用 awk 完成

awk -F, '
    NR == FNR {pin[$1]; next}
    ($1 in pin) && (!($1 in max) || $2 > max[$1]) {max[$1] = $2}
    END {for (key in max) print key FS max[key]}
' pins Output.csv

关于linux - 使用 foreach 循环时不会出现列的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52040388/

相关文章:

linux - 通过 debian 软件包在系统范围内提供 vim 语法高亮

php - 在 linux 服务器上设置未知属性:yii\console\ErrorHandler::errorAction

linux - 使用 "setfacl"命令时的特殊字符

linux - 开关盒 : Confusing error in "Syntax error: word unexpected (expecting "in")"

javascript - 应用map函数可以工作,而foreach函数不能reactjs

php - 在循环中插入数据并仅回显一次

php - 如何将数字相乘直到达到个位数并计算数字?

linux - 删除以非数字数据开头的行并在 linux 中的特定文本格式之前插入文本

linux - 在整个驱动器中搜索明文密码

linux - 使用 -C(或 -B/-A)运行时在 grep 结果之间输出空行