4

目标:仅输出大于 1 且小于 -1 的数据

或者

输出介于 1 和 -1 之间的数据

我有 awk 的基础知识,可以打印第 2 列(我的数据所在的位置)注意我还指定了 0-1 的范围

awk '/[0-1]/  {print $2}' test.dat

我还需要行号,所以我添加了 NR ...

awk '/[0-1]/  {print $2 NR}' test.dat

为了确保我清楚,重点是确定哪些数据行超出了可接受的范围,因此我们可以在分析中忽略它们。(即任何大于 1 或小于 -1 的东西变化太大)。

你能提供的任何帮助都会很棒。我在下面粘贴了一些示例数据。

http://pastebin.com/7tpBAqua

4

2 回答 2

7

不确定是否要评估每一列中的数据,或者是否需要测试特定列。测试单个列是最简单的;测试多个或所有列是该模式的一个相当简单的重复扩展。由于您特别提到了第 2 列,假设您只想在第 2 列介于 -1 和 1 之间时打印它:

awk -F, '($2 >= -1) && ($2 <= 1) { print $2 }'

要测试该字段是否大于 1 或小于 -1:

awk -F, '($2 <= -1) || ($2 >= 1) { print $2 }'

打印不同的字段或整行 ( $0) 应该是相当明显的。($2 >= -1) && ($2 <= 1) { print $2 }要检查每个字段,只需为您感兴趣的每个字段重复整个子句(很快就会变得冗长),或者类似这样的内容(未经测试):

awk -F, '{ for (i = 1; i <= NF; ++i) if (($i >= -1) && ($i <= 1)) print $i; }'
于 2012-10-29T18:02:38.363 回答
3
awk -F'[ ,]' 'NR>2{for (i=2;i<=NF;i++) if ($i<-1 || $i>1) { print NR; next } }' file
于 2012-10-29T19:06:58.220 回答