linux - 如何检查条件,然后使用 awk 在条件行之前的行中打印特定字段?

标签 linux shell awk sed

我有一个包含以下输出的文件:

58.752391 0.000  1 1  6.152565 2.757839 14.558406 0.000000 2.156979  0.000000 0.000000  0 0 0  1
16.089417316313 0.000000000000 6.171292860915 2.757949885550  -150168 0
6.953218e-310 0.000000e+00 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
0.000000 0.000000 0 0 0 0 0.000000   0.000000 0.000000  0
0.000000 0.000000 0 0 0 0 0.000000   0.000000 0.000000  0
-1.000000 -1.000000
0 

14034.172996 0.000  13 13  1.107936 1.107936 -1.000000 -1.000000 -1.000000  23.670258 34.172995  0 0 0  0
3085.963203076240 0.667625281751 10.905159250868 8.915904022910  -150168 639
6.953218e-310 0.000000e+00 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
3.120454 8.844320 8 1 127.895 0 23.670258   1.107936 0.000000  0
1.107936 8.390152 13 5 1e+50 0 34.172995   1.107936 0.000000  0
-1.000000 -1.000000
3 CE1(5-1;8-1) SN1 SN2 

等等……

我想检查第 6 行(然后每隔 8 行)中的两个数字是否不同于 -1.000000。如果是这样,根据哪个(第一个、第二个或两者)不同,我想产生以下输出:

1) 第一个数字不同于-1.000000:

这个不同的数字,这个数字之前的 4 行 - 第三列(在这个例子中是 6.171292860915,如果这个数字不同于 -1.000000),这个数字之前的 2 行 - 第 8 列(在这个例子中是 0.000000),同一行 -第7列,这个数字之后的行

2) 第二个数字不同于-1.000000:

这个不同的数字,这个数字之前4行-第四列,这个数字之前1行-第8列,同一行-第7列,这个数字之后的行

3) 第一个和第二个数字不同于-1.000000:

1) 的输出 2) 的输出

我知道如何使用 sed 提取这些行,其中 -1.000000 在我的示例中。现在我想我应该在我的 sed 命令中包含一些 awk 的 ifs 来检查该行是否包含 -1.000000 或其他数字,然后打印我需要的内容。但是,我不知道如何引用 sed 正在检查的行之前的行。如果有任何帮助或线索,我将不胜感激。谢谢!

最佳答案

Perl 来拯救:

#!/usr/bin/perl
use warnings;
use strict;

# Read in "paragraph mode".
$/ = q();

# Auto add newlines.
$\ = "\n";

while (<>) {
    my @lines = map [ split ], split /\n/;  # Create an array of arrays.
    if (-1 != $lines[5][0]) {
        print join ' ', $lines[5][0], $lines[1][2], $lines[3][7],
                        $lines[3][6], @{ $lines[6] };
    }
    if (-1 != $lines[5][1]) {
        print join ' ', $lines[5][1], $lines[1][3], $lines[4][7],
                        $lines[4][6], @{ $lines[6] };
    }
}

关于linux - 如何检查条件,然后使用 awk 在条件行之前的行中打印特定字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31562701/

相关文章:

java - 无法从 java 命令行运行 shell 脚本

c - Linux 中的启动默认堆大小?

bash - 访问运行脚本的 docker 容器外部的 bash 脚本变量

php - 用于查找和替换的 Linux 命令行不起作用

linux - 有没有办法检查 USB 驱动器是否已停止?

linux - AWK 错误 - grep 处或附近的语法错误

python - 无法将以下文本文件解析为 pandas 数据框?

linux - 在 bash (awk) 中导入新文件时删除点和斜杠

python - 如何连接两个Python程序?

linux - 使用 `date` 命令获取上个月、当前月和下个月