如何删除包含模式的整个条目?

如何删除包含模式的整个条目?

我有许多具有以下格式的文件:

Num  name1  name2  value

例如,名为 in1.sp 的文件如下所示:

 C1    in1    out1        3.9e-12
 C2    foo    st1/in1     1.2e-14
 C3    foo2   in1         8.3e-14
 ...

等等。在所有行中,名称列之一包含文件名。我想删除包含文件名的整个条目,即使还有其他文本。因此,如果以上是输入,则所需的输出将是:

 C1    out1    3.9e-12
 C2    foo     1.2e-14
 C3    foo2    8.3e-14
 ...

谢谢!

答案1

如果我也正确理解你,请尝试这个

for f in *.sp; do 
  sed "s/[^ ]*${f%.*}[^ ]*//" "$f" | column -t
done

输出:

C1  out1    3.9e-12
C2  foo     1.2e-14
C3  foo2    8.3e-14

答案2

如果我理解正确的话,您想要删除包含与文件名匹配的任何字段值(减去其扩展名)。

grep如果是这样,您可以在以下位置进行字段明智的操作perl

$ cat in1.sp 
 C1    in1    out1        3.9e-12
 C2    foo    st1/in1     1.2e-14
 C3    foo2   in1         8.3e-14

然后

$ perl -alpe '$_ = join "\t", grep { $_ !~ (split(/\./,$ARGV))[0] } @F' in1.sp 
C1  out1  3.9e-12
C2  foo   1.2e-14
C3  foo2  8.3e-14

答案3

您可以用来awk选择所需的列

$ awk '{print $1 "\t" $2 "\t" $4}' in1.sp 
C1  in1 3.9e-12
C2  foo 1.2e-14
C3  foo2    8.3e-14

只要保证列内的字段非空且不包含空格,这就可以工作。

相关内容