次の形式のファイルがたくさんあります。
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
これは、列内のフィールドが空でなく空白が含まれていない限り機能します。