在 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
我正在从文件中读取数字。然后计算该数字中的总位数,并尝试在 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