awk - Awk 新手。与负数格式作斗争

标签 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 列,因此我们假设您只想在第 2 列介于 -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; }'

关于awk - Awk 新手。与负数格式作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126577/

相关文章:

linux - 从 sed 的更改中排除字符串

linux - 用基于匹配组的评估字符串替换字符串(优雅的方式,不使用 for .. in)

awk - 无法在expect脚本中使用awk : invalid command name "awk"

vim - 转换文件每行一个字

linux - 用于比较列中数字的 Bash 脚本

shell - 有没有办法使用 awk 总结单个标识符的第二个字段并用非数字替换输出?

linux - 根据换行符将命令输出行存储到数组中

linux - 在linux文件中仅打印6个和10个字符的单词

linux - 将特定行转为列

bash - 移动目录中少于 X 行的所有文件