csv에서 텍스트 파일로 열 추출

csv에서 텍스트 파일로 열 추출

이것은 간단한 질문입니다. 여러 열이 포함된 csv 파일이 있는데 3개 열을 추출하고 출력을 텍스트 파일에 저장하고 싶습니다.

내 데이터 세트의 예:

page_id     post_name   link        post_type       likes_count
5550296508  Ben Carson  www.cnn.com shared_story    192583
5830242058  John Smith  www.abc.com news_story      467
9485676544  Sara John   www.msc.com shared_story    462

세 개의 열을 선택하고 쉼표 구분 기호를 사용하여 텍스트 파일에 저장하고 싶습니다. 원하는 출력: (또는 열을 깔끔하게 표시하는 유사한 형식. 이 형식과 정확히 동일할 필요는 없습니다.)

"page_id","post_name","post_type"
"5550296508","Ben Carson","shared_story"
"5830242058","John Smith", "news_story" 
"9485676544", "Sara John",  "shared_story" 

나는 다음을 사용하려고합니다 awk:

awk -F',' '{print $1,$2,$4}' Data.csv > output.txt

다음 출력이 반환됩니다. 열 사이에 공백이 있으며 공백을 쉼표로 바꾸고 싶습니다.

page_id     post_name   post_type 
5550296508  Ben Carson  shared_story    
5830242058  John Smith  news_story   
9485676544  Sara John   shared_story 

시도해 보았지만 printf원하는 출력을 반환하지 않기 때문에 올바른 문자열을 사용하고 있는지 확신할 수 없습니다.

awk '{printf "%s,%s,%s", $1,$2,$4}' Data.csv > output.txt

사용 sed. 이는 첫 번째 공백만 쉼표로 대체합니다.

awk -F',' '{print $2,$5,$10}' Data.csv | sed 's/ /,/' > output.txt

답변1

다음을 사용하여 쉼표로 구분할 수 있습니다 ,.

awk '{print $1","$2","$4}' Data.csv > output.txt

출력은 다음과 같습니다:

page_id,post_name,post_type
5550296508,Ben,www.cnn.com
5830242058,John,www.abc.com
9485676544,Sara,www.msc.com

답변2

입력 파일은 다음과 같습니다.아니요쉼표로 구분하세요. 탭으로 구분된 것 같아요. 이 경우 다음을 시도해 보십시오.

$ awk -F'\t' '{print "\""$1,$2,$4"\""}' OFS='","' Data.csv
"page_id","post_name","post_type"
"5550296508","Ben Carson","shared_story"
"5830242058","John Smith","news_story"
"9485676544","Sara John","shared_story"

충분하지 않다면 다음을 시도해 보세요.

awk -F'\t+' '{print "\""$1,$2,$4"\""}' OFS='","' Data.csv

어떻게 작동하나요?

  • -F'\t'탭을 필드 구분 기호로 사용하도록 awk에 지시합니다. 또는 -F'\t+'awk에게 하나 이상의 필드 탭 문자의 임의 시퀀스를 필드 구분 기호로 사용하도록 지시하세요.

  • print "\""$1,$2,$4"\""awk에게 큰따옴표, 필드 1, 필드 구분 기호, 필드 2, 필드 구분 기호, 필드 4, 큰 따옴표 순으로 인쇄하도록 지시합니다.

  • OFS='","'awk에게 ","출력 시 필드 구분 기호로 사용하도록 지시합니다.

관련 정보