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

3つの列を選択し、カンマ区切り文字を使用してテキストファイルに保存したいと思います。必要な出力:(または列をきれいに表示する同様の形式。この形式とまったく同じである必要はありません。)

"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に、1つ以上のフィールドタブ文字のランダムシーケンスをフィールド区切り文字として使用するように指示します。

  • print "\""$1,$2,$4"\""awkに二重引用符、フィールド1、フィールド区切り記号、フィールド2、フィールド区切り記号、フィールド4、二重引用符の順に印刷するように指示します。

  • OFS='","'awkに","出力時にフィールド区切り文字として使用するように指示します。

関連情報