パターンを含むアイテム全体を削除するにはどうすればよいですか?

パターンを含むアイテム全体を削除するにはどうすればよいですか?

次の形式のファイルがたくさんあります。

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
 ...

など。すべての行の名前列の1つにファイル名が含まれています。他のテキストがあっても、ファイル名を含むエントリ全体を削除したいと思います。したがって、上記が入力の場合、希望の出力は次のようになります。

 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

これは、列内のフィールドが空でなく空白が含まれていない限り機能します。

関連情報