根据第一行删除文件中的行

时间:2015-04-27 20:45:17

标签: terminal multiple-columns

我尝试处理一系列txt文件(实际上是.out,但行为类似于空格分隔的txt文件)。我想根据与第一行相比的输出删除文本中的某些行。

例如:

ID VAR1 VAR2
1 8 9
2 4 1
3 3 2

我想用VAR1<删除所有行。 0,5。

我找到了一种在excel中手动执行此操作的方法,但是有350多个文件,这将是一个漫长的夜晚,有确定的方法可以做到这一点更有效..我已经在终端中处理了这组文件(OSX)。

1 个答案:

答案 0 :(得分:1)

这是awk的典型作业,awk是文件操作的古老语言。

{ if ($2 < 0.5) { } else { print $0 } } 的作用是将文件中的每一行与条件匹配,并为其提供操作。它还允许简单地对行列进行基本解析。在这种情况下,您要测试第二列是否小于0.5,如果是,则不打印该行。否则,打印该行(实际上,这将删除变量小于0.5的行。

您的变量位于第2列,其中awk称为$ 2。每个完整行由变量$ 0引用。

所以你会做这样的事情:

NR == 1 {
    for (i = 1; i <= NF; i++) {
        title[i] = $i
    }
    next
}

{
    for (i = 1; i <= NF; i++) {
        if ($i != "no") {
            printf(" %s=%s", title[i], $i)
        }
    }
    printf("\n")
}

或类似的东西,我还没有使用awk一段时间。上面的代码是一个awk脚本。将其应用于您的文件,并将输出重定向到一个新文件(将删除所有不满足条件的行)。