2017-05-31 134 views
0

我是新来的脚本错误采摘列的值,我有以下问题:1。 后得到“文件:”文本值文件的应跳过2行,然后从第二行读从txt文件UNIX

( - 我想跳过2行,如果我发现“文件:”在txt文件中,这可能会发生超过1次)。

I/P文件是:

file : noki lab:3232 date : 12/3/16 
field length position text 
name 16 0  1  account name 
info 1  10  Bank account info 
city 3 0 13  bank acc city name 
state 4  17  acc state 

--here我想跳过2行,我发现 “文件:” 在TXT文件。这可能会发生超过1次。

  1. 阅读后,我只想选择“提交”和“位置”列数据。 代码:

    的awk -F '' '{打印$ 1,$ 3}' ip.txt

但我得到O/P,如:

name 0 
info 10 
city 0 
state 17 

这是错误的,我需要输出:

name 1 
info 10 
city 13 
state 17 

回答

2

awk来救援!

$ awk '/^file :/ {c=2} 
     !(c&&c--) {print $1, $(NF-1)}' file 

name 1 
info 10 
city 13 
state 17 

说明 当模式匹配设置计数器为两个,跳过行的指定数量和从静止打印第一和倒数第二个字段。

UPDATE 如果最后一列包含空格,最简单的(gawk只)

$ awk '/^file :/ {c=2} 
     !(c&&c--) {print $1,gensub(/.* ([0-9]+) .*/,"\\1",1)}' file 
name 1 
info 10 
city 13 
state 17 

否则,花时间来修正输入文件的格式。摆脱字段之间的额外0,将字段分隔符更改为制表符等。

+0

看起来不错。我正在考虑找到一个能够让我从最终索引的shell工具,但想不到一个简单的方法来做到这一点。 awk显然很棒,但不会缩放。然后,对于这样的事情,这是相当强大的:) – EdvardM

+0

'rev |切-f2 | rev'是带壳工具的倒数第二个字段... – karakfa

+0

谢谢!忘记了这个方便的工具自然存在。 – EdvardM