ファイルの各行の固定位置を変更する方法

ファイルの各行の固定位置を変更する方法

以下のファイルがあります。 $number(位置19-30)と(位置59-70)をセント単位の数字に置き換える方法は?

更新:すべてのフィールドは同じ固定位置になければなりません。

入力する:

asfdassdfasfasfas    1,719.41 23:55:51 016250    9003286     1,719.41    24.64DR 381000
safsdfoskjshfkkdf      184.00 23:57:53 019516    9007963       184.00     2.94DR 384000
agereafdfbfbgsdgd    1,168.00 23:59:55 012229    9002950     1,168.00     3.54DR 0000 

希望の出力:

asfdassdfasfasfas      171941 23:55:51 016250    9003286       171941    24.64DR 381000
safsdfoskjshfkkdf       18400 23:57:53 019516    9007963        18400     2.94DR 384000
agereafdfbfbgsdgd      116800 23:59:55 012229    9002950       116800     3.54DR 0000  

ここに画像の説明を入力してください。

ベストアンサー1

古いawk

入力に固定フィールド幅を使用し、必要に応じてフィールドを切り取り、元の幅で埋め直します$2$4

awk 'BEGIN {FIELDWIDTHS = "19 11 29 11 30"} {
     gsub(/\.|,/,"",$4); gsub(/\.|,/,"",$2);
     printf "%s%11s%s%11s%s\n", $1, $2, $3, $4, $5
}' file1

文字の削除は、状況によって変わらず、削除される文字の数に関係なく、フィールドが常に正しい幅で埋められるため、これは一般的な解決策である必要があります(11)。

ゲジン

cat file1
asfdassdfasfasfas    1,719.41 23:55:51 016250    9003286     1,719.41    24.64DR 381000
safsdfoskjshfkkdf      184.00 23:57:53 019516    9007963       184.00     2.94DR 384000
agereafdfbfbgsdgd    1,168.00 23:59:55 012229    9002950     1,168.00     3.54DR 0000 

ガジュット

asfdassdfasfasfas      171941 23:55:51 016250    9003286       171941    24.64DR 381000
safsdfoskjshfkkdf       18400 23:57:53 019516    9007963        18400     2.94DR 384000
agereafdfbfbgsdgd      116800 23:59:55 012229    9002950       116800     3.54DR 0000

おすすめ記事