从txt文件unix中选择错误的列值

时间:2017-05-31 14:55:04

标签: linux bash shell unix sh

我是脚本新手,我有以下问题: 1.获得"文件后:"文本文件中的值应该跳过2行,然后从第2行读取

( - 这里我想跳过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

- 这里我想跳过2行我发现"文件:"在txt文件中。它有可能发生超过1次。

  1. 阅读后我想选择"提交"和"位置"仅列数据。 代码:

    awk -F' ' ' {print $ 1,$ 3}' ip.txt

  2. 但我得到了o / p之类的:

    name 0
    info 10
    city 0
    state 17
    

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

    name 1
    info 10
    city 13
    state 17
    

1 个答案:

答案 0 :(得分:2)

awk救援!

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

name 1
info 10
city 13
state 17

<强>解释 当模式匹配时,将计数器设置为2,跳过指定的行数,并从其余部分打印第一个和倒数第二个字段。

<强>更新 如果最后一列包含空格,则最简单(仅gawk

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

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