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

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

Eu tenho um arquivo csv parecido com este:

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 forma: (usando sedou awkcomandos 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 4ª coluna e http://foo.com/{some string}o padrão Remain (em outras palavras, extrair links da 4ª coluna quando contiverem o domínio foo.com)

Responder1

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

Responder2

Você pode fazer o seguinte:

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

sedmudará todos os \ns para ,e cutescolherá o 4º campo quando o delimitador for,

informação relacionada