我有一个文本文件,格式如下:
Wind River Linux glibc_cgl (cgl) 3.0.3
Build label: NDPGSN_5_0_SRC_GSN_LINUX_GPBOS_2
Build host: eselnvlx1114
Build date: Mon Mar 18 23:24:08 CET 2013
Installed: Fri Jun 20 02:22:08 EEST 2014
Last login: Fri Aug 8 11:37:08 2014 from 172
gsh list_imsins
=== sysadm@eqm01s14p2 ANCB ~ # gsh list_imsin
ps Class Identifiers |
---------------------------------------
A imsins -imsi 20201
A imsins -imsi 20205
A imsins -imsi 20210
A imsins -imsi 204045
我想提取-imsi
旁边的数字。输出看起来像:
20201
20205
202210
204045
在此过程之后,输出进一步,我已经完成了。起初我被告知文本格式是静态的,所以我编写了以下脚本:
for (( r=1; r<5; r++));
do
awk 'NR>12' IMSI$r.txt | awk '{print $NF "\r"}' > N$r
awk 'NR>12' IMSI$r.txt | awk '{print $NF "\r"}' >> out
done
我有2个文件作为输出,因为我需要将它们用于其他目的。
有没有办法让脚本更灵活,处理动态文本文件?
作为一种可能的解决方案,是否可以让脚本查找短语-imsi
并在其后获取记录?并继续这样做,直到它找到文件结束?
我尝试使用grep
和awk
执行此操作,但我从未获得正确的输出。如果您有任何其他想法,请分享。
答案 0 :(得分:1)
我会选择类似的东西:
$ awk '/-imsi/ {print $NF}' file
20201
20205
20210
204045
这将打印包含-imsi
的那些行的最后一个单词。
您还可以使用带有后视的grep
来打印-imsi
之后的数字。
$ grep -Po '(?<=-imsi )[0-9]*' file
20201
20205
20210
204045