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\tem vez de um literal TAB. - Se houver
merged.txt.gznessa linha, o salto para marcar2(b2) não será executado devido ao!, portanto, a segunda linha do script removeABeCDitens e a quarta linha removefiltereditens, antes que absem marca pule para o final do script. - Se não houver
merged.txt.gznessa linha, a primeira linha nos enviará para marcar:2, em seguida, se houverAB.txt.gz, a sexta linha nos enviará para marcar:1para remover os itensfiltered, ou se houverCD.txt.gz, a última linha faz o mesmo - Se não houver nem
mergednemABnã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.