如果它们匹配ID,我想将来自不同长度的多行的值组合成一行.
输入示例是:
ID: Value:
a-1 49
a-2 75
b-1 120
b-2 150
b-3 211
c-1 289
d-1 301
d-2 322
Run Code Online (Sandbox Code Playgroud)
期望的输出示例是:
ID: Value:
a 49,75
b 120,150,211
c 289
d 301,322
Run Code Online (Sandbox Code Playgroud)
我如何编写awk表达式(或sed或grep或其他东西)来检查ID是否匹配,然后将所有这些值打印到一行?我当然可以将它们打印到不同的列中并稍后将它们组合起来,所以问题实际上只是有条件地打印,如果ID匹配并且如果没有开始新行.
在awk中,如果您的ID聚集在一起:
awk 'NR==1 {print $0}
NR > 1 {sub("-.*", "", $1)}
NR == 2 {prev=$1; printf "%s %s", $1, $2}
NR > 2 && prev == $1 {printf ",%s", $2}
NR > 2 && prev != $1 {prev=$1; printf "\n%s %s", $1, $2}' your_input_file
Run Code Online (Sandbox Code Playgroud)