Shell 如何将公共前缀重写为标头?

Shell 如何将公共前缀重写为标头?,shell,Shell,假设您有一个更改注释列表,如下所示: 2011-02-21: Removed first feature to get rid of previous customer 2011-02-21: Added second feature to open up new markets 2011-02-09: Implemented hot fix to calm down angry customer 2011-02-08: Developed project into a minimal viab

假设您有一个更改注释列表,如下所示:

2011-02-21: Removed first feature to get rid of previous customer
2011-02-21: Added second feature to open up new markets
2011-02-09: Implemented hot fix to calm down angry customer
2011-02-08: Developed project into a minimal viable product
2011-02-08: Started project
是否可以使用标准shell工具将其改写为以下格式

2011-02-21
  * Removed first feature to get rid of previous customer
  * Added second feature to open up new markets

2011-02-09
  * Implemented hot fix to calm down angry customer

2011-02-08
  * Developed project into a minimal viable product
  * Started project
如果是这样的话,如何通过管道

#!/bin/bash

lastprefix=""
while read prefix line
do
  if [ "$prefix" != "$lastprefix" ]
  then
    lastprefix="$prefix";
    echo ""
    echo "$prefix"
  fi
  echo "  *  $line"
done
通过这个管道

#!/bin/bash

lastprefix=""
while read prefix line
do
  if [ "$prefix" != "$lastprefix" ]
  then
    lastprefix="$prefix";
    echo ""
    echo "$prefix"
  fi
  echo "  *  $line"
done
这应该做到:

awk -F: '$1 != prev {print $1; prev = $1} {$1 = ""; print "  *" $0}' inputfile
这应该做到:

awk -F: '$1 != prev {print $1; prev = $1} {$1 = ""; print "  *" $0}' inputfile

如果是作业,请贴上标签。没有作业,真正的工作。。。但是在用Ruby写东西之前,我想知道是否有一个简单的shell解决方案。如果是家庭作业,请将其标记为这样。没有家庭作业,真正的工作。。。但是在用Ruby写东西之前,我想知道是否有一个简单的shell解决方案,或者甚至是{$1=*;print}或者甚至是{$1=*;print}这是一个很好的解决方案。我更喜欢它,因为它很容易理解和修改。这是一个很好的解决方案。我更喜欢它,因为它很容易理解和修改。