이것은 간단한 질문입니다. 여러 열이 포함된 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에게","
출력 시 필드 구분 기호로 사용하도록 지시합니다.