Eu tenho vários arquivos que têm o seguinte formato:
Num name1 name2 value
Então, por exemplo, o arquivo chamado in1.sp fica assim:
C1 in1 out1 3.9e-12
C2 foo st1/in1 1.2e-14
C3 foo2 in1 8.3e-14
...
e assim por diante. Em todas as linhas, uma das colunas de nome contém o nome do arquivo. Quero remover a entrada inteira se ela contiver o nome do arquivo, mesmo que haja outro texto. Portanto, se acima for a entrada, a saída desejada seria:
C1 out1 3.9e-12
C2 foo 1.2e-14
C3 foo2 8.3e-14
...
Obrigado!
Responder1
Se eu também entendi corretamente, tente isso
for f in *.sp; do
sed "s/[^ ]*${f%.*}[^ ]*//" "$f" | column -t
done
Saída:
C1 out1 3.9e-12
C2 foo 1.2e-14
C3 foo2 8.3e-14
Responder2
Se bem entendi, você deseja remover qualquer valor de campo que contenha uma correspondência com o nome do arquivo (menos sua extensão).
Nesse caso, você poderia fazer uma análise de campo grep
em perl
:
$ cat in1.sp
C1 in1 out1 3.9e-12
C2 foo st1/in1 1.2e-14
C3 foo2 in1 8.3e-14
então
$ 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
Responder3
Você pode usar awk
para selecionar as colunas desejadas
$ awk '{print $1 "\t" $2 "\t" $4}' in1.sp
C1 in1 3.9e-12
C2 foo 1.2e-14
C3 foo2 8.3e-14
Isso funcionará desde que os campos dentro das colunas não estejam vazios e nunca contenham espaços em branco.