awkの特定の列にnumfmtを適用する

awkの特定の列にnumfmtを適用する

私は、特定のディレクトリ内のすべてのユーザーのディスク使用量を分析するためのスクリプトtcsh(はい...知っている必要があります)を作成しています。

最後に、次の形式でレポートを生成したいと思います。

user1 1.6GB
user2 1.1GB
..
user69 10MB

まず私は走る

find . -printf "%u  %s\n" | awk '{user[$1]+=$2}; END{ for( i in user) print i " " user[i]}' > example.tmp

その後、2番目の列を人間が読めるサイズに変換しました。

awk '{ print $2 }' example.tmp | numfmt --to=iec-i --suffix=B --padding=7

ただし、前の列があった場所に再びマージすることはできません。合計numfmtにコマンドを直接挿入する方法はありますか?awk

私は "awk"コマンドが少し弱い方だから不足しているコードを許してください。

ベストアンサー1

フォーマットを2番目のフィールドに直接制限するオプションを使用すると、--fieldこれを回避できます。numfmt

find . -printf "%u  %s\n" | 
  awk '{user[$1]+=$2}; END{ for(i in user) print i, user[i]}' | 
  numfmt --field=2 --to=iec-i --suffix=B --padding=7

awkで特定の値を適用する必要がある場合は、numfmt単純な場合には機能しますが、不要なバリエーションは次のとおりですgetline var

find . -printf "%u  %s\n" | 
  awk '
    {user[$1]+=$2}
    END {
      cmd = "numfmt --to=iec-i --suffix=B --padding=7"; 
      for(i in user){ printf "%s ", i; print user[i] | cmd; close(cmd) } 
    }
  '

おすすめ記事