Добавление десятичной точки к целому числу с помощью awk или sed - PullRequest
0 голосов
/ 03 мая 2020

Итак, у меня есть файлы csv для использования с hledger, и последнее поле каждой строки - это сумма для этой строки транзакции.

Строки имеют следующий формат: дата1, дата2, описание, сумма

С форматом суммы любой длины от 4 до 6 цифр; теперь по какой-то причине во всех суммах пропущен период до двух последних цифр.

Сейчас : 1000 Должно быть : 10,00

Теперь : 25452 Должно быть : 254,52

Как добавить '.' перед последними двумя цифрами всех строк, желательно с sed / awk?

Итак, входной файл:

16.12.2005,18.12.2005,ATM,2000
17.12.2005,18.12.2005,utility,12523
18.12.2005,20.12.2005,salary,459023

желаемый вывод

16.12.2005,18.12.2005,ATM,20.00
17.12.2005,18.12.2005,utility,125.23
18.12.2005,20.12.2005,salary,4590.23

Спасибо

Ответы [ 4 ]

1 голос
/ 03 мая 2020
sed 's/..$/.&/'

......................

1 голос
/ 03 мая 2020

Вы можете попробовать:

awk -F , '{printf "%s,%s,%s,%-6.2f\n", $1, $2, $3, $4/100.0}'

Вы всегда должны добавить образец входного файла и выходных данных, которые вы хотите в своем вопросе.

В этом вводе, который вы вводите, вы должны будете определить, что должно произойти, если поле описания содержит , или если в качестве ввода можно ввести величину меньше 100.

В зависимости от вашего ответа мне нужно будет адаптировать код или нет.

0 голосов
/ 05 мая 2020
16.12.2005,18.12.2005,ATM,20.00 
17.12.2005,18.12.2005,utility,125.23 
18.12.2005,20.12.2005,salary,4590.23

awk -F, '{sub(/..$/,".& ")}1' file
0 голосов
/ 03 мая 2020

Вы также можете использовать утилиту cut , чтобы получить желаемый результат. В вашем случае вы всегда хотите добавить «.» до последних двух цифр. По сути, это можно представить примерно так:

Шаг 1: Получить все символы от начала до последних 2 символов.

Шаг 2 : Получить последние 2 символа с конца.

Шаг 3: Объединить их с нужным вам символом (в данном случае '.').

Соответствующая команда для каждого шага следующая:

$ a='17.12.2005,18.12.2005,utility,12523'
$ b=`echo $a | rev | cut -c3- | rev` 
$ c=`echo $a | rev | cut -c1-2 | rev` 
$ echo $b"."$c 

Это приведет к выводу

17.12.2005,18.12.2005,utility,125.23
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...