固定レコード長(〜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_
すべての行を印刷します(上記のように変更もまったく変更されません)。