csv 파일이 많습니다. 원래 디자인에는 5개의 열이 있어야 했습니다.
방금 csv 파일의 중간 열에 임의 개수의 쉼표가 포함되어 있고 올바르게 인용되지 않은 문자열이 있다는 것을 발견했습니다. 결과적으로 열 개수에 관계없이 행이 생성됩니다.
이 csv 파일의 처음 두 열과 마지막 두 열을 어떻게 얻을 수 있습니까?
쉼표의 개수는 행마다 바뀔 수 있으므로 처음 두 열과 마지막 두 열을 지정하는 방법이 필요합니다.
답변1
awk -F, '{print $1, $2, $(NF-1), $NF}' < input
보다 일반적으로 (질문 제목에 따라) n
입력의 첫 번째 열과 마지막 열을 인쇄합니다. 이것이 일부 열을 두 번 인쇄한다는 의미인지 확인하지 않고-
awk -v n=2 '{
for(i=1; i <= n && i <= NF; i++)
printf "%s%s", $i, OFS
for(i=NF-n+1; i <= NF && i >= 1; i++)
printf "%s%s", $i, OFS
printf "%s", ORS
}' < input
( -F
필요에 따라 구분 기호를 사용하십시오)
답변2
진주:
echo a,b,X,X,X,X,c,d | perl -F, -slane 'print join ",", @F[0..$n-1, -$n..-1]' -- -n=2
a,b,c,d
답변3
이 sed를 사용할 수도 있습니다
sed -E 's/(([^,]*,){2}).*((,[^,]*){2})/\1\3/;s/,,/,/'