substituindo o conjunto de charaters do PIPE

1

Eu tenho um arquivo que é separado por 3 PIPES (|||). Por exemplo, o nome ||| url ||| date ||| amount |||

Estou tentando fazer duas coisas

  1. extrair coluna específica em outro arquivo, digamos - quantidade a ser separada no novo arquivo (é a quarta coluna no arquivo)

  2. substitua todos os 3 canais por vírgula, para que os novos arquivos se pareçam com - nome, url, data, quantidade,

Eu quero substituir a vírgula por exatamente 3 canais, pois meus dados também possuem caracteres de pipe único entre eles.

Eu tentei isso - awk -F '[\ |]' + '{print $ 4}' temp.csv > temp1.csv. Mas isso extrai se até mesmo o pipe único estiver nos dados.

Obrigado antecipadamente Rahul

    
por user3749706 23.01.2017 / 19:22

2 respostas

1

Use [|]{3} como o delimitador de campo para extrair um campo específico dos dados originais:

$ awk -F '[|]{3}' '{ print $4 }' input.csv

Para usar uma expressão regular, o separador de campos requer o GNU awk .

Para substituir todo o ||| por uma vírgula:

$ sed 's/|||/,/g' input.csv >output.csv
    
por 23.01.2017 / 19:30
0

Isso deve fazer o truque para extrair o quarto campo de dados delimitados por triplos canais:

sed 's/|||/,/g' /path/to/input | awk -F, '{print $4}'
    
por 23.01.2017 / 19:30