格式化大量记录,使用公共键将行转换为列

formatting a number of records, tranforming rows to columns with a common key

我有以下格式的文件:

AS/2018100400 : 105
AS/2018100401 : 34
AS/2018100402 : 1
AS/2018100403 : 8
AS/2018100404 : 14
AS/2018100405 : 37
AS/2018100406 : 7
AS/2018100407 : 141
AS/2018100408 : 21
AS/2018100409 : 37
AS/2018100410 : 35
AS/2018100411 : 3
AS/2018100412 : 31
AS/2018100413 : 39
AS/2018100414 : 32
AS/2018100415 : 32
AS/2018100416 : 39
AS/2018100417 : 32
AS/2018100418 : 4
AS/2018100419 : 43
AS/2018100420 : 40
AS/2018100421 : 33
AS/2018100422 : 25
AS/2018100423 : 15

预期输出:

     2018100400 2018100401.....  2018100423
AS   105        34        .....  15

这可以通过在其他地方做一个枢轴来实现,但是在 bash 脚本中,这样做的好方法是什么?

虽然来自 oliv 的 link 很好,但这里是一个纯粹的 shell 解决方案:

fmt='%10s '
declare -a vals;
while read fname colon value; do
    if [ "$colon" != ":" ]; then
        echo "Improper line: $fname $colon $valjue";
        continue;
    fi  
    vals+=( "$value" );
    printf "$fmt" "${fname##*/}"
done
printf "\n"
for v in "${vals[@]}"; do
  printf "$fmt" "$v"
done
printf "\n"