![sed 또는 awk를 사용하여 특정 패턴을 기반으로 특정 열을 수정하는 방법](https://linux55.com/image/97503/sed%20%EB%98%90%EB%8A%94%20awk%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8A%B9%EC%A0%95%20%ED%8C%A8%ED%84%B4%EC%9D%84%20%EA%B8%B0%EB%B0%98%EC%9C%BC%EB%A1%9C%20%ED%8A%B9%EC%A0%95%20%EC%97%B4%EC%9D%84%20%EC%88%98%EC%A0%95%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
다음과 같은 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
실제로는 네 번째 열만 조작하고 패턴을 보존하고 싶습니다 http://foo.com/{some string}
(즉, 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
구분 기호가 이면 모든 s가 \n
로 변경되고 ,
4번째 필드가 선택됩니다.cut
,