我有一些文本文件,如下所示。我想仅在第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
我怎么能实现这个目标?您的建议将不胜感激!!
答案 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