Como modificar uma coluna específica usando sed ou awk com base em um padrão específico

1

Eu tenho um arquivo csv com esta aparência:

c1,c2,c3,http://aaa.com/blblbblb\nhttp://bbb.com/sdsdsds\nhttp://ccc.com\nhttp://foo.com/ghghghgh

cc1,cc2,cc3,http://eee.com/blblbblb\nhttp://foo.com/sdsdsds\nhttp://fff.com\nhttp://ttt.com/ghghghgh

ccc1,ccc2,ccc3,http://foo.com/blblbblb\nhttp://vvv.com/sdsdsds\nhttp://foo.com/nmnmnmnm\nhttp://qqq.com\nhttp://kkk.com/ghghghgh

é possível manipular o arquivo csv acima e exportar da seguinte maneira: (usando sed ou awk ou comandos bash semelhantes)

c1,c2,c3,http://foo.com/ghghghgh 

cc1,cc2,cc3,http://foo.com/sdsdsds

ccc1,ccc2,ccc3,http://foo.com/blblbblb;http://foo.com/nmnmnmnm

Na verdade, eu quero manipular apenas a quarta coluna e o padrão Remain http://foo.com/{some string} (em outras palavras, extrair os links da quarta coluna quando contiverem o domínio foo.com)

    
por alrz 30.10.2016 / 07:22

2 respostas

1
sed '
    s|http://foo.com|@|g #replace 'foo.com' domain with rare symbol
    /./s/\n\|$/;/g      #replace '\n' by ';'  and add it to end 
    s/http[^@]*;//g      #remove all domain(s) without 'foo.com'
    s|@|http://foo.com|g #place 'foo.com' back
    s/;$//               #remove ';' from the end of line
    ' csv.file
    
por 30.10.2016 / 10:30
0

Você pode fazer o seguinte:

cat your_csv.csv | sed 's/\n/,/g' | cut -d ',' -f 4

sed mudará todos os \n s para , e cut escolherá o quarto campo quando o delimitador for ,

    
por 30.10.2016 / 09:47