我的数据格式如下
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
,也许我的语法错了。
答案 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}'