場所をファイル内の他の場所に置き換える

場所をファイル内の他の場所に置き換える

固定レコード長(〜2500)のフラットファイルがあります。

H20190105                         
D0012345APPLE INC      100001072010
D0008912SAMSUNG        450023082005
T0001245678                       
  • 位置2-8 A / C#(左が0で埋められる)
  • 口座名 9~23桁(右スペースを埋める)
  • 残りの24フィールドの配置

A / C#から先行ゼロを削除して、ファイルのアカウント名フィールド(位置9-23)をACCT_A / C#にマスクする必要があります。

希望する結果は次のとおりです。

H20190105
D0012345ACCT_12345     100001072010
D0008912ACCT_8912      450023082005
T0001245678

次のコマンドを使用しましたが、A / C#から先行ゼロを削除できませんでした。

awk '/^D/{$0=substr($0,1,8)"ACCT_"substr($0,2,7)"  "substr($0,24,length($0))} 1' FILE.TXT > OUT.TXT

int(substr($0,2,7))次のフィールド位置を変更するには、トリムゼロを使用します。

希望の結果を得るのに役立つ人はいますか?

ベストアンサー1

やや短いawk文章:

$ awk '/^D/ { nr = substr($0,2,7); $0 = sprintf("D%07dACCT_%-10d%s", nr, nr, substr($0,24)) } { print }' file
H20190105
D0012345ACCT_12345     100001072010
D0008912ACCT_8912      450023082005
T0001245678

このコードは、最初の位置にaがあり、変更する必要があるawk行を検出します。D

sprintf()新しい行は、後にゼロで埋められた数字、その後にD同じ数字の文字列(現在はゼロで埋められていない)、最後に行の位置24の内外で構成されます。ACCT_

すべての行を印刷します(上記のように変更もまったく変更されません)。

おすすめ記事