我尝试处理一系列txt文件(实际上是.out,但行为类似于空格分隔的txt文件)。我想根据与第一行相比的输出删除文本中的某些行。
例如:
ID VAR1 VAR2
1 8 9
2 4 1
3 3 2
我想用VAR1<删除所有行。 0,5。
我找到了一种在excel中手动执行此操作的方法,但是有350多个文件,这将是一个漫长的夜晚,有确定的方法可以做到这一点更有效..我已经在终端中处理了这组文件(OSX)。
答案 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脚本。将其应用于您的文件,并将输出重定向到一个新文件(将删除所有不满足条件的行)。