使用shell分组logging

有没有可能改变这一点:

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 

假设:

  1. 0不是数据第一列中的有效条目。
  2. 第一列已经进行了数字sorting。

如果#2无效,则需要通过sort(1)首先使用数字sorting来运行input,以便按照正确的顺序进行sorting。

如果我发现我只是回答你的功课,我会非常恼火。 我唯一的安慰是,如果你的老师看到我写的东西,他们会认为你是疯了。

这一个在stackoverflow是非常相似的,并有一些很好的答案: https : //stackoverflow.com/questions/380817/best-way-to-simulate-group-by-from-bash