Как изменить определенный столбец с помощью sed или awk на основе определенного шаблона

Как изменить определенный столбец с помощью sed или awk на основе определенного шаблона

У меня есть CSV-файл, который выглядит так:

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

возможно ли манипулировать вышеуказанным CSV-файлом и экспортировать его следующим образом: (используя sedили awkили аналогичные команды bash)

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

На самом деле я хочу манипулировать только 4-м столбцом и http://foo.com/{some string}шаблоном Remain (другими словами, извлекать ссылки из 4-го столбца, когда они содержат домен foo.com)

решение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

решение2

Вы можете сделать следующее:

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

sedизменит все \ns на ,и cutвыберет 4-е поле, когда разделитель,

Связанный контент