新しい列に複数の列を加算および減算する

新しい列に複数の列を加算および減算する

csvファイルの一部をコピーしました。

publish_date,headline_text,likes_count,comments_count,shares_count,love_count,wow_count,haha_count,sad_count,thankful_count,angry_count
20030219,aba decides against community broadcasting licence,1106,118,109,155,6,5,2,0,6
20030219,act fire witnesses must be aware of defamation,137,362,67,0,0,0,0,0,0
20030219,a g calls for infrastructure protection summit,357,119,212,0,0,0,0,0,0
20030219,air nz staff in aust strike for pay rise,826,254,105,105,21,45,7,0,90
20030219,air nz strike to affect australian travellers,693,123,153,17,113,4,103,0,7
20030219,ambitious olsson wins triple jump,488,57,161,0,0,0,0,0,0
20030219,antic delighted with record breaking barca,386,60,80,3,4,0,93,0,68
20030219,aussie qualifier stosur wastes four memphis match,751,45,297,0,0,0,0,0,0
20030219,aust addresses un security council over iraq,3847,622,141,1,0,0,0,0,0
20030219,australia is locked into war timetable opp,1330,205,874,0,0,0,0,0,0
20030219,australia to contribute 10 million in aid to iraq,3530,130,0,23,16,4,1,0,0
20030219,barca take record as robson celebrates birthday in,13875,331,484,0,0,0,0,0,0
20030219,bathhouse plans move ahead,11202,450,2576,433,51,20,4,0,34
20030219,big hopes for launceston cycling championship,3988,445,955,0,0,0,0,0,0
20030219,big plan to boost paroo water supplies,460,101,92,0,0,0,0,0,0
20030219,blizzard buries united states in bills,303,223,193,0,0,0,0,0,0

新しい列を作成し、各項目の合計(likes_count + love_count + thankful_count) - (angry_count + sad_count)を合計し、列名をemotion_ polarityとして指定するのに役立つシェルコマンドを見つけたいです。

頑張りました

awk -F , {$12=$3+$6+$10-$11-$9;}{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12} file

しかし、何らかの理由で動作しません。熱が互いに混ざっています。この作業をしてコンマを失ったからではないかと思います。

ベストアンサー1

コレクションOFS(酸素出力F生産するS分割ツール)また、カンマを失わないようにします。これを行うと$12=$3+$6+$10-$11-$9(たとえば、すべての列の値を設定/更新すると(この場合)、カンマは消えます。アッ現在の行は、OFS内部変数(デフォルトは空白文字)に基づいてフィールド分割されているため、コンマに設定すると、印刷時にそのまま残ります。

awk 'BEGIN{ FS=OFS="," }
          { $(NF+1)=(NR==1? "emotional_polarity" : $3+$6+$10-$11-$9); print }' infile

または、現在の入力行に新しい更新を追加するだけです。

awk -F, '{ $0=$0 FS (NR==1? "emotional_polarity" : $3+$6+$10-$11-$9); print }' infile

~から奇妙なマニュアル:

FS
入力フィールド区切り記号(セクションを参照)フィールドの区切り方法の指定)。値は、入力レコードのフィールド間の区切りに一致する単一文字ストリングまたは複数文字正規表現です。

オルフェウス
出力フィールド区切り記号(セクションを参照)出力区切り文字)。 printステートメントによって印刷されたフィールド間に出力します。デフォルトは " " で、単一のスペースで構成される文字列です。

おすすめ記事