首页 > 解决方案 > 当其连续行在同一列中具有负值时,提取在特定列中具有正值的行

问题描述

我正在尝试对一些原始数据集进行一些分析,以提取其中第 9 列具有正值且其连续行在同一列中具有负值的特定行。

文件:

2020  01  11  00  28.5833  77.2000  986   280    280
2020  01  11  00  28.5833  77.2000  975   284    4
2020  01  11  00  28.5833  77.2000  968   284.4  0.4
2020  01  11  00  28.5833  77.2000  960   284    -0.4
2020  01  11  00  28.5833  77.2000  944   283    -1
2020  01  11  00  28.5833  77.2000  925   284    1
2020  01  11  00  28.5833  77.2000  901   286    2
2020  01  11  00  28.5833  77.2000  892   286.8  0.8
2020  01  11  00  28.5833  77.2000  850   286    -0.8
2020  01  11  00  28.5833  77.2000  700   276.8  -9.2
2020  01  11  00  28.5833  77.2000  677   275.2  -1.6
2020  01  11  00  28.5833  77.2000  594   268.9  -6.3
2020  01  11  00  28.5833  77.2000  587   269.1  0.2
2020  01  11  00  28.5833  77.2000  507   260.1  -9
2020  01  11  00  28.5833  77.2000  500   259.5  -0.6

在上述文件中,第 3 行在第 9 列 (0.4) 中具有正值,其连续行具有负值 (-0.4)。所以,我想提取第 3 行。同样的第 8 行和第 13 行。

标签: awk

解决方案


awk应该适合你:

awk '$9 < 0 && p9 > 0 {print pr; pr = p9 = ""} $9 > 0 {pr = $0; p9 = $9}' file

2020  01  11  00  28.5833  77.2000  968   284.4  0.4
2020  01  11  00  28.5833  77.2000  892   286.8  0.8
2020  01  11  00  28.5833  77.2000  587   269.1  0.2

或者更易读的形式:

awk '$9 < 0 && p9 > 0 {
   print pr
   pr = p9 = ""
}
$9 > 0 {
   pr = $0
   p9 = $9
}' file

推荐阅读