Eu posso criar este script Python que usa um nome de arquivo como argumento de linha de comando e gera o conteúdo inteiro, mas sem todas as linhas que não têm a string oint
(sem distinção entre maiúsculas e minúsculas) em todas as colunas.
#! /usr/bin/env python3
import sys
COLUMN_SEPARATOR = " " # character or string used as column separator. Tab = "\t"
SEARCH_STRING = "oint".lower() # case-insensitive string that needs to be present in all columns
with open (sys.argv[1]) as f:
rows=[list(map(str.strip, line.split(COLUMN_SEPARATOR))) for line in f.readlines()]
for r in rows:
if all([SEARCH_STRING in r[i].lower() for i in range(len(r))]):
print(COLUMN_SEPARATOR.join(r))
Copie o script acima e salve-o como qualquer arquivo, por exemplo, csvfilter.py
.
Torne-o executável usando chmod +x csvfilter.py
.
Em seguida, execute-o com o arquivo para processar como argumento único.
Exemplo de saída com seu exemplo acima (colunas separadas por 3 espaços) como source.csv
:
$ ./csvfilter.py source.csv
lidocaine (oint, patch) generic 1 tube of ointment
lidocaine (oint, patch) generic 1 tube of ointment
lidocaine (oint, patch) generic 1 jar of ointment
O script não modifica o arquivo original, apenas imprime a nova versão na saída padrão. Além disso, quaisquer caracteres de espaço em branco entre as colunas diferentes da cadeia configurada como COLUMN_SEPARATOR
serão descartados.
Para substituir o arquivo original pela versão modificada, redirecione a saída de volta ao arquivo original:
$ ./csvfilter.py source.csv > source.csv
Você também pode salvar a versão modificada como um arquivo:
$ ./csvfilter.py source.csv > modified.csv