datamashを使用してすべての列で作業する方法は?

datamashを使用してすべての列で作業する方法は?

次のデータファイルがあるとしましょう。

111 222 333
444 555 666
777 888 999

GNU Datamash を使用して、次のように各列の合計を計算できます。

cat foo | datamash -t\  sum 1 sum 2 sum 3
1332 1665 1998

データファイルの列数がわからない場合は、datamashを使用してこれをどのように実行しますか?

たとえば、フィールドセレクタcutなどの範囲終了記号をサポートしているので、この質問をします。-

ベストアンサー1

不明な範囲を指定するオプションは表示されません。データ混合ハンドブック

このperl単一のライナーをお試しください

$ perl -lane '$s[$_]+=$F[$_] for 0..$#F; END{print join " ", @s}' ip.txt
1332 1665 1998
  • -aオプションは自動的に入力行をスペースに分割し、結果を@F配列に保存します。
  • for 0..$#F配列を繰り返して$#F最後の要素のインデックスを提供する
  • $s[$_]+=$F[$_]合計を@s配列に保存すると、デフォルトでは初期値は0数値コンテキストにあります。$_各反復にはインデックス値があります。
  • END{print join " ", @s}すべての入力行が処理されたら、@sスペースを区切り文字として使用して配列の内容を印刷します。

おすすめ記事