我有許多具有以下格式的文件:
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
只要保證列內的欄位非空且不包含空格,這就可以工作。