我正在從檔案中讀取數字。然后計算該數字中的總位數并嘗試在 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
uj5u.com熱心網友回復:
使用sed
$ sed 's/[0-9]//15g' file
12345678912345
34543234567654
34543234567651
34543234567652
34543234567653
uj5u.com熱心網友回復:
您可以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
uj5u.com熱心網友回復:
如果你只想提取數字,怎么樣
grep -Eo '^[0-9]{14}' file >res1.csv
uj5u.com熱心網友回復:
更新了你的腳本。
while read -r numbers || [[ -n "$numbers" ]]; do
DIGITS=$(echo $numbers | cut -c 1-14)
echo $DIGITS >> res1.csv
done
現在輸出:
12345678912345
34543234567654
34543234567651
34543234567652
34543234567653
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455987.html
上一篇:為什么在bash(MacOS)中使用expr會出現語法錯誤?
下一篇:Perl比較兩個檔案并列印出現
