Unix返回的电话号码,需要格式化

时间:2013-02-17 19:38:41

标签: linux bash unix

我的数据格式如下

JSD4863 XXX-XX-XXXX DOE, JOHN C JR-II BISS CPSC BS   INFO TECH   412/779-9445 

它是一个很大的列表,所以我做了一个循环来读取特定的行。看起来像这样

#!/bin/bash
for linePosition in {11..22}
do
  holder=`sed -n "${linePosition}p" $1|awk '{print $12}'`
  echo "$holder"
done

打印出数字412/779-9445。适用于所有生产线 但是,我只对最后4个数字感兴趣(例如9445) 我可以在循环中添加什么来分隔它? 我试过cut,也许我的语法错了。

3 个答案:

答案 0 :(得分:0)

请看以下内容。使用第一个命令,我将向您展示工作脚本的外观。使用第二个命令,我将向您显示示例脚本的输出。

$ cat a.sh
#!/bin/sh
sed -n '11,22p' $1 | grep -o '[0-9]*$'

$ ./a.sh a.txt
9445
9445
9445
9445
9445
9445
9445
9445
9445
9445
9445
9445

答案 1 :(得分:0)

sed -rn 's/.*-([0-9]{4})$/\1/p'

答案 2 :(得分:0)

仅限Awk:

awk 'FNR>=11 && FNR<=22 {print $12}' file

sed + awk:

sed -n '11,22p' | awk '{print $12}'