ファイルの連続行間の変更の表示

ファイルの連続行間の変更の表示

ファイルの行がどのように変更されたかを簡単に確認する方法はありますか?たとえば、次の「my.log」ファイルがあるとします。

cpu1 cpu2 cpu3 cpu4
   5    3    3    6
   5    3    3    6
   5    0    3    6
   3    0    6    6
   5    3    3    0

コマンドラインに「cat my.log | showchanges」などの内容を入力すると、次の内容が表示されます。

cpu1 cpu2 cpu3 cpu4
   5    3    3    6
   "    "    "    "
   "    0    "    "
   3    "    6    "
   5    3    3    0

理想的には、「showchanges」は空白を列の区切り文字で貪欲に処理することによってこれを行いますが、詳細については非常に柔軟です。列が多い場合は、変更を簡単に確認したいと思います。また、まったく変更されていない行を省略する方が最終的には良いです。

ベストアンサー1

awk '{ bak=$0; for(i=1; i<=NF; i++)$i=($i==tmp[i]?"-":$i)
       split(bak, tmp)
}1' infile

cpu1 cpu2 cpu3 cpu4
5 3 3 6
- - - -
- 0 - -
3 - 6 -
5 3 3 0

レコードのインデントを維持するには(フィールド幅4):

awk '{ bak=$0; for(i=1; i<=NF; i++)$i=sprintf("%4s", ($i==tmp[i]?"-":$i))
       split(bak, tmp)
}1' infile

cpu1 cpu2 cpu3 cpu4
   5    3    3    6
   -    -    -    -
   -    0    -    -
   3    -    6    -
   5    3    3    0

おすすめ記事