データファイルの特定の列範囲内の空白文字列をゼロの文字列に変更します。

データファイルの特定の列範囲内の空白文字列をゼロの文字列に変更します。

私たちはRedhat Linux 7.9とbsh

データファイルを見て、すべてのフィールドを列10と列20の間のスペースを0に置き換えたいと思います。

したがって、サンプルファイルがある場合:

#######################

#######################

#######################

#########        ######

#######################

#######################

#######################

#######################

私はスクリプトが次のようになりたいです:

#######################

#######################

#######################

#########000000000#####

#######################

#######################

#######################

#######################

私は以下を試してみました。

awk '{val=substr($0,10,9);gsub(val,"     ","000000000")}1' scr1

ただし、元のファイルのみが返されます。私が逃したものは何ですか?

答え1

Perlは、示されているようにこれを簡単に処理できます。

Perlインデックスは0から始まるので、列10は9で、col10 ... 20には20-10 + 1 = 11要素があります。

$ perl -lpe 'substr($_, 9, 11) =~ tr/ /0/' file

出力:-

#######################

#######################

#######################
12345678901234567890
#########00000000000###
         12345678901
#######################

#######################

答え2

パラメータのgsub()順序と意味が正しくありません。マニュアルページをご覧ください。

すべてのUnixシステムのすべてのシェルでawkを使って次のことをしたいようです。

$ awk '{val=substr($0,10,9)} gsub(/ /,0,val){$0=substr($0,1,9) val substr($0,19)} 1' file
#######################

#######################

#######################

#########00000000######

#######################

#######################

#######################

#######################

関連情報