2017-05-31 139 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