awkを使用して、パイプで区切られたファイルから先行ゼロを削除します。

awkを使用して、パイプで区切られたファイルから先行ゼロを削除します。

パイプ区切り文字にソースファイルがあり、先行ゼロを削除する必要があります。

初期ファイル:

010N00000001|20100111|20150112|PA|3|00001|41|+0000000100.00|+0000000000.00|+0000000000.00|022|R| |
010N00000001|20100115|20150115|PA|3|00001|41|-0000000050.00|+0000000000.00|+0000000000.00|022|R| |

希望の出力:

010N00000001|20100111|20150112|PA|3|1|41|100.00|0|0|022|R||
010N00000001|20100115|20150115|PA|3|1|41|-50.00|0|0|022|R||

awk誰でも上記の構文を提供できますか?より多くの属性がありますが、6番目と8番目のソース属性と対応する6番目と8番目の出力属性の値を知りたいです。

ベストアンサー1

たとえば、fileデータが含まれている場合:

awk -F\| -v OFS=\| '{ $6  = sprintf( "%.0f",  $6  )
                      $8  = sprintf( "%.2f",  $8  )
                      $9  = sprintf( "%.0f",  $9  )
                      $10 = sprintf( "%.0f",  $10 )
                      print }' file

この-F\|オプションは、(入力)フィールド区切り記号をパイプ記号として設定し、-v OFS=\|出力フィールド区切り記号にも同様に適用されます.割り当てのある行は - 関数を使用してそのフィールドの書式を再指定し(同じパラメータで印刷された内容を返しsprintf()ます)、最後に - 関数を使用して書式が完全に変更されたレコードを出力します。printf()print

再フォーマットする場合は、sprintf()いくつか選択できます。制御文字そして関連修飾子。このリンクはGNU awkドキュメントを指していますが、ほとんどの文字は非常に一般的です。

おすすめ記事