【发布时间】:2015-07-22 22:19:34
【问题描述】:
我有一个带有以下输出的文件:
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 行 - 第三列(在本例中,如果数字不同于 -1.000000,则为 6.171292860915),此数字之前的 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 正在检查的行之前的行。我将不胜感激任何帮助或线索。谢谢!
【问题讨论】:
-
也写输出。你不能通过 awk 做到这一点。 awk 不能回溯文件行。我们必须编写shell脚本
-
@ShravanYadav 我不知道我不能用 awk 回溯。谢谢!你能帮我处理这个 shell 脚本吗?
-
分享您需要的确切输出?不是输出描述
-
例如-1.000000, 6.171292860915, 0.000000, 0.000000, 0 每个数字用逗号分隔。每个输出都在一个新行中。