データ
ID | Size | Blocks
-------|-----------|---------
206 |80760288 | 157744
207 |80760288 | 157744
328 |241520288 | 471728
AWK希望出力
ID |BlockSize | Size | Blocks
-------|----------|-----------|---------
206 | 511.971 |80760288 | 157744
207 | 511.971 |80760288 | 157744
328 | 511.991 |241520288 | 471728
blockSize
サイズ/チャンクはどこにありますか?
AWKを使用してこの変換をどのように実行できますか?
答え1
1つの方法は次のとおりです。
$ awk -F'|' -vOFS="|" '{
if(NR==1){print $1," Blocksize ",$2,$3}
else if(NR==2){print $1,"-----------",$2,$3}
else{printf "%-7s|%-11s|%-11s|%-11s\n",$1,$2/$3,$2,$3}
}' file
ID | Blocksize | Size | Blocks
-------|-----------|-----------|---------
206 |511.971 |80760288 | 157744
207 |511.971 |80760288 | 157744
328 |511.991 |241520288 | 471728
ただし、これは列の整列を維持する必要があるため、不必要に複雑になります。実際には必要ないと思うので、使いたいだけかもしれません。
$ sed 's/[-|]/ /g;/^ *$/d' file |
awk '{if(NR==1){print $1,"Blocksize",$2,$3}else{print $1,$2/$3,$2,$3}}'
ID Blocksize Size Blocks
206 511.971 80760288 157744
207 511.971 80760288 157744
328 511.991 241520288 471728
これはユーザーフレンドリーではありませんが、スペースで区切られたデータを必要とするすべてのプログラムへの完全な入力です。