有没有可能改变这一点:
1 Alice 1 Bob 1 Cary 2 Dan 3 Eve 3 Fred
进入这个:
1 Alice,Bob,Cary 2 Dan 3 Eve,Fred
使用shell? (没有Perl,Ruby,Python等)
是的,有几种方法可以做到这一点。
Sort是你的朋友: sorting维基 。
Awk : Awk Howto 。
在bash版本4中使用关联数组:
declare -A ary while read line; do set -- $line ary[$1]+="$2," done < input_file for key in ${!ary[@]}; do printf "%s %s\n" $key ${ary[$key]%,} # the "%," strips the trailing comma done
废话我忍不住挑战。 这里是我的解决scheme在shell(准确地说是bash)作为一个oneliner:
k=0; while read ij; do if [ $k -eq $i ]; then echo -n ",$j"; \ else [ $k -gt 0 ] && echo; echo -n "$i $j"; k=$i; fi; done \ </tmp/infile; echo
产生所需的输出,格式正确:
1 Alice,Bob,Cary 2 Dan 3 Eve,Fred
假设:
如果#2无效,则需要通过sort(1)首先使用数字sorting来运行input,以便按照正确的顺序进行sorting。
如果我发现我只是回答你的功课,我会非常恼火。 我唯一的安慰是,如果你的老师看到我写的东西,他们会认为你是疯了。
这一个在stackoverflow是非常相似的,并有一些很好的答案: https : //stackoverflow.com/questions/380817/best-way-to-simulate-group-by-from-bash