我有这样的结构:
aaa,up
bbb,down
aaa,down
aaa,down
aaa,up
bbb,down
ccc,down
ccc,down
ddd,up
ddd,down
我想要下一个输出:
aaa,up
bbb,down
ccc,down
ddd,up
所以,首先要做的就是分组依据。然后,如果至少有一行向上打印,否则向下打印。
到目前为止我有这个:
awk -F"," '$2=="up"{arr[$1]++}END{for (a in arr) print a,arr[a]}'
然后我更改 $2=="down"并将两个结果合二为一。但是有了这个,我就有了 up 和 down 的重复值。
有时,我收到的不是起伏,而是 0、1、2、3、4,这是更多变量,向上状态是 0 和 1。
提前致谢。
最佳答案
如何保存您看到的值,并优先选择“向上”?
awk -F "," '$2 ~ /0^(0|1)$/ { $2 = "up" }
$2 ~ /^[2-9]/ { $2 = "down" }
$2 == "up" || !($1 in a) { a[$1]=$2 }
END { OFS=FS; for(k in a) print k, a[k] }' file | sort
也就是说,如果值为“up”,我们总是保存它。否则,如果我们还没有此键的值,我们只会保存该值。
我不确定我是否掌握了您的 0,1,2,3,4 要求。第一行现在将数字转换为“向上”或“向下”。
关于linux - awk group by 并在符合条件时打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26542052/