输入文件:
AAA 2 3 4 5
BBB 3 4 5
AAA 23 21 34
BBB 4 5 62
我希望输出为:
AAA 2 3 4 5 23 21 34
BBB 3 4 5 4 5 62
我觉得我应该使用awk
和sed
,但不知道如何实现它。有没有人有什么好主意?感谢。
答案 0 :(得分:2)
这可能对您有用:
sort -sk1,1 file | sed ':a;$!N;s/^\([^ ]* \)\(.*\)\n\1/\1\2/;ta;P;D'
AAA 2 3 4 5 23 21 34
BBB 3 4 5 4 5 62
或gnu awk;
awk '{if($1 in a){line=$0;sub(/[^ ]* /,"",line);a[$1]=a[$1]line;next};a[$1]=$0}END{n=asort(a);for(i=1;i<=n;i++)print a[i]}' file
AAA 2 3 4 5 23 21 34
BBB 3 4 5 4 5 62
答案 1 :(得分:2)
这是一个解决上述问题的awk 1班轮:
awk '{line=$2;for(i=3; i<=NF; i++) line=line " " $i; arr[$1]=arr[$1] " " line} END{for (val in arr) print val, arr[val]}' file
答案 2 :(得分:0)
使用bash版本4的关联数组
$ declare -A vals
$ while read key nums; do vals[$key]+="$nums "; done < filename
$ for key in "${!vals[@]}"; do printf "%s %s\n" "$key" "${vals[$key]}"; done
AAA 2 3 4 5 23 21 34
BBB 3 4 5 4 5 62