sed 's/.*<TAB>//;/merged.txt.gz/!b2
s/,*[^,]*AB.txt.gz,*//g;s/,*[^,]*CD.txt.gz,*//g
:1
s/,*[^,]*filtered[^,]*,*//g;b
:2
/AB.txt.gz/b1
/CD.txt.gz/b1' myfile.txt
Como funciona:
- Como você só precisa do último dos colmuns separados por TAB, o
s/.*
TAB//
remove tudo até e incluindo a última TAB. Note que você pode ter que digitar ctrl-v antes do TAB no seu shell. Ou para o% GNUsed
, use\t
em vez de um literal TAB. - Se houver
merged.txt.gz
nessa linha, o salto para marcar2
(b2
) não será executado devido ao!
, portanto, a segunda linha do script removeAB
eCD
itens e a quarta linha removefiltered
itens, antes que ab
sem marca pule para o final do script. - Se não houver
merged.txt.gz
nessa linha, a primeira linha nos enviará para marcar:2
, em seguida, se houverAB.txt.gz
, a sexta linha nos enviará para marcar:1
para remover os itensfiltered
, ou se houverCD.txt.gz
, a última linha faz o mesmo - Se não houver nem
merged
nemAB
nãoCD
, a linha será produzida sem alteração.
Isso produz a saída para sua entrada dada (exceto por uma barra que já está faltando na linha 2 da sua entrada). Você pode modificá-lo para corresponder à sua entrada original.
Se nem sempre é a última coluna, mas sempre a sétima, em vez de s/.*
TAB //
use s/\([^
TAB ]
TAB \}\{6\}//;s/
TAB .*//
para remover os primeiros seis e todas as colunas à direita.