在 14 位计数后删除每个数字

Delete every number after 14 digit count

我正在从文件中读取数字。然后计算该数字中的总位数,并尝试在 14 位数字计数后删除所有数字。在我目前的逻辑中,如果超过 14 位数字,我只能减少一位数字。一旦达到 14 位数,我将尝试消除所有其他数字。

file:

numbers
123456789123454
3454323456765455
34543234567651666
34543234567652
34543234567653

logic.sh:

while read -r numbers  || [[ -n "$numbers" ]]; do
    digit_number="${imei//[^[:digit:]]/}"
    echo "digit of number: ${#digit_number}"
    if ((${#digit_number} > 14)); then
        modified=${numbers%?}
        echo $modified > res1.csv
    else
        echo $numbers >res1.csv
    fi
done <$file

预期输出

12345678912345
34543234567654
34543234567651
34543234567652
34543234567653

您可以使用 cut 完成该任务:

╰─$ echo "12345678901234567890" | cut -c 1-14
12345678901234

也不需要逐行读取文件:

╰─$ echo "numbers                  
123456789123454
3454323456765455
34543234567651666
34543234567652
34543234567653" > file

╰─$ cat file | cut -c 1-14 > output

╰─$ cat output                     
numbers
12345678912345
34543234567654
34543234567651
34543234567652
34543234567653

使用sed

$ sed 's/[0-9]//15g' file
12345678912345
34543234567654
34543234567651
34543234567652
34543234567653

如果只想提取数字,如何

grep -Eo '^[0-9]{14}' file >res1.csv

更新了您的脚本。

while read -r numbers  || [[ -n "$numbers" ]]; do
     DIGITS=$(echo $numbers | cut -c 1-14)
     echo $DIGITS >> res1.csv
done

现在输出:

12345678912345
34543234567654
34543234567651
34543234567652
34543234567653