약 2,500만 행이 포함된 대용량 CSV 파일이 있습니다.256목록. CSV 파일의 필드 구분 기호는 ~
문자입니다.
다음과 같이 데이터의 처음 두 열을 바꾸고 싶습니다.
From : data1~data2~data3..................................
To : "data1"~"data2"~data3................................
현재 사용하고 있지만 awk
다음과 같습니다.
cat file | awk -F "~" '{print "\""$1"\"""\""$2"\"~"$3"~"$4"~"...................}'
예를 들어 awk에 256개의 열을 입력합니다.$4"~"$5"~"$6"~".....$256"~"
이것을 코딩하는 다른 더 좋은 방법이 있습니까?
답변1
아니요, 256개 필드를 모두 지정할 필요는 없습니다. 첫 번째 열과 두 번째 열을 변경하여 다음을 수행한 다음 파일을 개별적으로 읽는 데 while 을 사용 하지 말고 print
함께 수행하세요.OFS='~'
cat
awk
awk
awk -F'~' '{$1="\""$1"\""; $2="\""$2"\""; print}' OFS='~' infile
마지막 두 필드를 변경합니다.
awk -F'~' '{$(NF-1)="\""$(NF-1)"\""; $NF="\""$NF"\""; print}' OFS='~' infile
답변2
보통 sed
쓰다
sed 's/[^~]*/"&"/;s//"&"/2'
하지만 대용량 파일을 언급하셨으니 이는훨씬 더 빨리위의 솔루션이나 버전보다 awk
:
sed 's/\(^[^~]*\)~\([^~]*\)/"\1"~"\2"/'
또는 확장 정규식을 사용하여 읽는 것이 더 쉬울 수도 있습니다.
sed -E 's/(^[^~]*)~([^~]*)/"\1"~"\2"/'