awk를 사용하여 csv를 생성할 때 발생하는 문제

awk를 사용하여 csv를 생성할 때 발생하는 문제

AWK를 사용하여 csv 파일을 만들려고 합니다. 열에 쉼표를 추가하기 위해 출력 파일 구분 기호를 사용하고 있습니다. 그런데 이름이 공백으로 구분되어 출력에서도 쉼표로 처리되는 열이 있습니다.

cat test.txt | head -n 3
Vulnerability ID        Package                                     Severity          Fix                     Vulnerability URL
CVE-2017-1000408        libc-bin-2.24-11+deb9u3                     High              2.24-11+deb9u4          https://security-tracker.debian.org/tracker/CVE-2017-1000408
CVE-2017-1000408        libc-dev-bin-2.24-11+deb9u3                 High              2.24-11+deb9u4          https://security-tracker.debian.org/tracker/CVE-2017-1000408

주문하다:

cat test.txt | awk -F' ' 'BEGIN{OFS=",";} {print $1,$2,$3,$4,$5;}' > file.csv

산출:

Vulnerability,ID,Package,Severity,Fix
CVE-2017-1000408,libc-bin-2.24-11+deb9u3,High,2.24-11+deb9u4,https://security-tracker.debian.org/tracker/CVE-2017-1000408
CVE-2017-1000408,libc-dev-bin-2.24-11+deb9u3,High,2.24-11+deb9u4,https://security-tracker.debian.org/tracker/CVE-2017-1000408

예상 출력:

Vulnerability ID,Package,Severity,Fix,Vulnerability URL
CVE-2017-1000408,libc-bin-2.24-11+deb9u3,High,2.24-11+deb9u4,https://security-tracker.debian.org/tracker/CVE-2017-1000408
CVE-2017-1000408,libc-dev-bin-2.24-11+deb9u3,High,2.24-11+deb9u4,https://security-tracker.debian.org/tracker/CVE-2017-1000408

답변1

내 제안은 문서의 나머지 부분과 다르게 헤더 줄을 자세히 설명하는 것입니다. 이 특별한 경우:

awk 'NR==1 {$0=gensub(/(Vulnerability) (ID|URL)/, "\\1_\\2", "g"); print gensub(/(Vulnerability)_(ID|URL)/, "\\1 \\2", "g", $1","$2","$3","$4","$5)} NR>1 {print $1","$2","$3","$4","$5}' test.txt > file.csv

또는:

sed -r '1s/(Vulnerability) (ID|URL)/\1_\2/g' test.txt | awk '{print $1","$2","$3","$4","$5}' | sed -r '1s/(Vulnerability)_(ID|URL)/\1 \2/g' > file.csv

댓글에서 매우 적합한 제안, 특히 여러 공백 문자로 분할하는 제안과 다른 도구를 사용하여 CSV 파일을 조작하라는 제안을 받았습니다. 또한 문제가 머리글 행에만 있는 경우에는 제가 직접 문제를 해결해 드리겠습니다. 그리고...진심이에요?필요제목에 공백이 있나요? (이 아니라 Vulnerability_URL)? 그것은 모두 실제 사용 사례에 따라 다릅니다.

나에게는 여러 공간을 분할하는 것이 가장 쉬운 것 같습니다.

sed 's/   */,/g' test.txt > file.csv

관련 정보