格式化大量记录,使用公共键将行转换为列
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"
我有以下格式的文件:
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"