パイプ区切り文字にソースファイルがあり、先行ゼロを削除する必要があります。
初期ファイル:
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ドキュメントを指していますが、ほとんどの文字は非常に一般的です。