Awk的新手。挣扎着负数格式

时间:2012-10-29 17:21:38

标签: awk

目标:仅输出大于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

2 个答案:

答案 0 :(得分:7)

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

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; }'

答案 1 :(得分:3)

awk -F'[ ,]' 'NR>2{for (i=2;i<=NF;i++) if ($i<-1 || $i>1) { print NR; next } }' file