列表

详情


SHELL21. 格式化输出

描述

我们有一个文件nowcoder.txt,里面的每一行都是一个数字串,假设数字串为“123456789”,那么我们要输出为123,456,789。
假设nowcoder.txt内容如下
1
12
123
1234
123456
那么你的脚本输出如下
1
12
123
1,234
123,456

原站题解

Bash 解法, 执行用时: 2ms, 内存消耗: 432KB, 提交时间: 2022-03-01

#!/bin/bash
while read line
do
	printf "%'d\n" $line
done <nowcoder.txt

Bash 解法, 执行用时: 2ms, 内存消耗: 452KB, 提交时间: 2021-12-10

while read lines; do
    printf "%'d\n" $lines
done<nowcoder.txt

Bash 解法, 执行用时: 3ms, 内存消耗: 408KB, 提交时间: 2022-04-18

while read line; do
    len=${#line}
    mod=$(($len%3))
    str=""

    if [ $mod -ne 0 ]; then
        str="${line:0:$mod}"
    else
        str="${line:0:3}"
    fi

    mod=${#str}
    for((i=$mod;i<$len;i=$i+3)); do
        str="$str,${line:i:3}"
    done
    
    echo $str
done < nowcoder.txt

Bash 解法, 执行用时: 3ms, 内存消耗: 408KB, 提交时间: 2021-11-25

while read line
    do
        k=0
        lStr=${#line}
        for ((i=$lStr-1; i>=0; i--))
            do
                ((k++))
                str="${line:i:1}$str"
                [ $(($k%3)) -eq 0 ] && [ $i -ge 1  ] && [ $lStr -gt 3 ] && str=",$str"
            done
            echo "$str"
            str=""
    done

Bash 解法, 执行用时: 3ms, 内存消耗: 412KB, 提交时间: 2022-03-18

set -x
while read line
do
    a=""
    j=${#line}
    i=$((${#line} - 3))
    while true 
    do
        if (( i < 0))
        then
            i=0
        fi
        if [[ -n $a ]]
        then
            a=",$a"
        fi
        a=${line:$i:$j-$i}$a
        if [[ $i -eq 0 ]]
        then
            break
        fi
        j=$i
        ((i-=3))
    done
    echo ${a[@]}
    
done 

上一题