如何刪除包含模式的整個條目?

如何刪除包含模式的整個條目?

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

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

只要保證列內的欄位非空且不包含空格,這就可以工作。

相關內容