从文本文件中提取数据

时间:2014-07-21 07:50:43

标签: awk sed gawk

我有一些文本文件,如下所示。我想仅在第4列具有5个或更多连续数字且> 0时才提取第二列的数量。

FILE1.TXT

68.2    408     68.2    0
33.4    409     30.3    3.1
12.6    410     7.5     5.1
90.7    411     55.0    35.7
25.2    412     12.1    13.1
55.9    413     .4      55.5
27.3    414     4.8     22.5
46.0    415     42.5    3.5
10.6    421     10.6    0
2.3     422     2.3     0

FILE2.TXT

    72.2    63   62.4   9.8
    10.7    65    .0    10.7
    64.4    66   7.9    56.5
    40.8    67   .0     40.8
    16.0    68  15.0    1
    21.2    69  21.2    0
    31.5    70  2.6     28.9
    26.0    71  21.3    4.7
    112.1   72  74.9    37.2
    86.8    73  86.2    .6
    12.1    74  7.2     4.9

期望的输出

*file1.txt
409
410
411
412
413
414
415
*file2.txt
63
65
66
67
68
*file2.txt
70
71
72
73
74

我怎么能实现这个目标?您的建议将不胜感激!!

1 个答案:

答案 0 :(得分:3)

使用awk

#!/usr/bin/awk -f
function print_all() {
    if (i >= 5) {
        print "*" FILENAME
        for (j = 1; j <= i; ++j)
            print a[j] 
    }
    i = 0
}
$4 > 0 {
    a[++i] = $2
    next
}
{
    print_all()
}
ENDFILE {
    print_all()
}

示例:

awk -f script.awk file1.txt file2.txt

简明版:

awk 'function print_all() { if (i >= 5) { print "*" FILENAME; for (j = 1; j <= i; ++j) print a[j] } i = 0 } $4 > 0 { a[++i] = $2; next } { print_all() } ENDFILE { print_all() }' file1.txt file2.txt

输出:

*file1.txt
409
410
411
412
413
414
415
*file2.txt
63
65
66
67
68
*file2.txt
70
71
72
73
74