substitua '_' por ',' em um arquivo que contenha uma lista de nomes de arquivos

3


Será útil para mim se alguém puder ajudar a escrever um script de shell para atender ao seguinte requisito.

Eu tenho um arquivo de texto que contém uma lista de nomes de arquivos, conforme mostrado abaixo:

ADB_AR_2006_07.pdf
ADBL_AR_2010_11.pdf
CBL_AR_2013_14.pdf
CZBIL_AR_2007_08.pdf
BOKL_AR_2015_16.pdf
..
..

Agora, quero substituir o primeiro e o segundo '_' por ',' por todos os nomes de arquivos listados no arquivo de texto. Assim, os nomes dos arquivos se tornam:

ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
..
..
    
por Samin Munankarmi 05.07.2017 / 11:07

3 respostas

5

Você pode usar uma expressão sed simples:

sed -Ei 's/^([^_]+)_([^_]+)_/,,/' file

file do conteúdo após a modificação:

ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
  • i - permite modificação de arquivos no local

  • -E - permite expressões regulares estendidas

Uma abordagem simplificada seria como:

sed -i 's/_/,/; s/_/,/' file
    
por 05.07.2017 / 11:13
2

Script python simples

#!/usr/bin/env python
from __future__ import print_function
import sys
with open(sys.argv[1]) as f:
    for line in f:
        tokens=line.strip().split('_')
        print(",".join(tokens[0:3]),'_',tokens[3],sep='')

A idéia principal é ler o arquivo linha por linha, dividi-lo em partes em _ separador e unir os primeiros 3 itens com _ em uma string usando a notação de fatia [0:3] . Se você precisar salvar essa saída como arquivo, use o operador > shell e envie a saída para um arquivo.

Teste:

$ ./edit_lines.py input.txt                                                                                                                                                             
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
    
por 16.07.2017 / 05:15
1

Solução com awk :

$ awk -F"_" '{ print $1","$2","$3"_"$4}' list 
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
    
por 08.07.2017 / 21:43