2014-07-21 178 views
2

我有一些文本文件,如下所示。我只想提取第二列的數字時,如果第四列有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 

我怎麼能做到這一點?你的建議將不勝感激!

+0

這是一個txt文件嗎?列按常規排列? – user3165438

回答

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 
+1

優秀!!非常感謝您的幫助!! – manual

+0

ENDFILE的用途是什麼? –

+0

@Jidder它每執行一次文件會話就結束。 – konsolebox