美好的一天。
每天我收到一个数字列表,如下例所示:
11986542586
34988745236
2274563215
4532146587
11987455478
3652147859
正如你所看到的,他们中的一些人有9个(总共11个数字)作为第三个数字而有些不(总共10个数字,因为带有额外9个的是新的巴西移动数字格式和没有它的是旧格式。
问题是我必须使用两种格式的数字作为另一个脚本的参数,我通常都是手工完成。
我正在尝试创建一个脚本,该脚本读取手机号码的长度并检查它并添加或删除数字或字符串的“9”(如果满足数字条件)并将其保存在单独的文件条件中满足了。
到目前为止,我只能检查其长度,但我不知道如何添加或删除第三位数字中的“9”。
#!/bin/bash
Numbers_file="/FILES/dir/dir2/Numbers_File.txt"
while read Numbers
do
LEN=${#Numbers}
if [ $LEN -eq "11" ]; then
echo "lenght = "$LEN
elif [ $LEN -eq "10" ];then
echo "lenght = "$LEN
else
echo "error"
fi
done < $Numbers_file
答案 0 :(得分:4)
您可以使用sed
删除任何字符串的第三个字符,如下所示:
sed 's/.//3'
示例:
echo "11986542586" | sed 's/.//3'
1186542586
在第三个字符中添加9:
echo "2274563215" | sed 's/./&9/3'
22794563215
答案 1 :(得分:2)
如果您绝对确定在第三个位置仅发生的事件,您可以使用awk 'substr($0,3,1)=="9"{$0=substr($0,1,2)substr($0,4,length($0))}1' file
1186542586
3488745236
2274563215
4532146587
1187455478
3652147859
语句,如下所示,
POSIX
使用符合substr()
的{{1}}功能,仅处理第3个位置9
的行,并在不考虑该数字的情况下移动记录。
substr(s,m [,n]) 返回从位置m开始的s的最多n个字符的子字符串,从1开始编号。如果省略n,或者如果n指定的字符数多于字符串中剩余的字符数,则子字符串的长度应受长度的限制。字符串s
答案 2 :(得分:1)
有很多文本操作工具可以做到这一点,但最轻的重量可能是cut
,因为这就是它的全部。
cut
只支持一个范围,但确实有一个反转函数,所以cut -c4
只能给你第四个字符,但是加上--complement
你得到的只是字符4。< / p>
echo 1234567890 | cut -c4 --complement
12356789