目标:仅输出大于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的东西都是太大的变化)。
您可以提供的任何帮助都会很棒。我在下面贴了一些样本数据。
答案 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