AWKでPandocパイプラインデータを使用する

AWKでPandocパイプラインデータを使用する

データ

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

これはユーザーフレンドリーではありませんが、スペースで区切られたデータを必要とするすべてのプログラムへの完全な入力です。

おすすめ記事