одна строка, используя sed и bc вместе? - PullRequest
2 голосов
/ 31 мая 2010

Я хочу добавить один к последнему значению в конце строки в sed. Я думаю по линии

cat 0809_data.csv |sed -e 's/\([0-9]\{6\}\).*\(,[^,]*$\)/\1\2/g'| export YEARS = $(echo `grep -o '[^,]*$' + 1`|bc)

например. 123456, kjhsflk, lksjgrlks, 2,8 -> 123456, 3,8

Будет ли это более разумным / выполнимым в awk?

1 Ответ

2 голосов
/ 31 мая 2010

Это должно работать:

years=$(awk -F, 'BEGIN{ OFS=", "} {print $1, $4+1}' 0809_data.csv)

Было бы очень неловко пытаться использовать sed и выполнять арифметику с частью результата. Вы должны были бы разорвать последовательность и сделать математику и собрать все вместе. AWK делает это аккуратно, без суеты.

Обратите внимание, что cat не является необходимым (даже с использованием sed в команде, аналогичной той, которая задана в вашем вопросе), и, вероятно, нет необходимости экспортировать переменную, если вы не вызываете другой сценарий и вам не нужно чтобы получить доступ к нему как «глобальная» переменная. Кроме того, оболочки обычно выполняют целочисленную математику, поэтому вам не нужно использовать bc, если вам не нужны плавающие числа.

...