私はこのようなファイルを持っています:
123123213,456,be
124243233,4346,ytr
123123123,436535,uytr
324234324,322,yt
234324323,32,tyutr
結果を出すために、中央のフィールドをゼロで埋めたいと思います。
123123213,00000456,be
124243233,00004346,ytr
123123123,00436535,uytr
324234324,00000322,yt
234324323,00000032,tyutr
これを実行するスクリプトを作成するにはどうすればよいですか?
私はこのような例を見てきました
awk '{ $6=sprintf("%06s", $6); print $0}'
しかし、私はそれを本当に理解していないので、それを機能させることができません。
これを試して:
awk -F , '{ printf "%i,%08i,%s\n" , $1 , $2 , $3 }' file
質問に_[sed]
_のタグを付けたので、これがスクリプトに基づくsed
バージョンです ここ 。
_sed 's/[^,][^,]*/\n0000000&/2;s/\n[^,]*\(.\{8\}\),/\1,/' inputfile
_
説明:
[^,][^,]*
_(これは_[^,]\+
_)s///2
_)改行、ゼロの束、および一致の内容:_\n0000000&
_(改行は次のステップのフィールドの開始をマークするために使用されます)\{8\}
_に一致するようになりました(これらの文字をキャプチャします\(\)
)の後にコンマが続く\1
_を一致に置き換えます。これにより、一時的な改行と余分なゼロが削除されます。これが機能する方法は、フィールドの先頭に余分なゼロを追加してから、フィールド以外のすべてを切り落とすことです。
あなたの質問のコマンドは正しいですが、更新が必要です。
awk '{ $6=sprintf("%0.8s", $6); print $0}'
また、出力フィールドセパレータの使用を変更するには:
awk '{ OFS="\xE7"; $6=sprintf("%0.8s", $6); print $0}'