1

我有这样的形式的数据

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了,也许我的语法错了。

4

3 回答 3

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
于 2013-02-17T19:44:08.663 回答
0

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

于 2013-02-17T19:50:54.773 回答
0

仅限 awk:

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

sed + awk:

sed -n '11,22p' | awk '{print $12}'
于 2013-02-17T20:16:55.750 回答