这是一个简单的问题。我有一个包含多列的 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 用作","
输出上的字段分隔符。