изменить номер дня в txt-файле - PullRequest
0 голосов
/ 02 октября 2018

Привет, это мой первый раз, когда у меня есть txt-файл с ежедневными данными, похожими на:

Station Year Month Day Q Deficit Duration SumDeficit SumDuration
3613100 1975 1 1 2.44 -2.233 1 -2.233 1
3613100 1975 1 2 2.11 -1.903 1 -4.136 2
3613100 1975 1 3 1.8 -1.593 1 -5.729 3
3613100 1975 1 4 1.6 -1.393 1 -7.122 4
3613100 1975 1 5 1.48 -1.273 1 -8.395 5
3613100 1975 1 6 1.72 -1.513 1 -9.908 6
3613100 1975 1 7 5.25 -5.043 1 -14.951 7
3613100 1975 1 8 3.44 -3.233 1 -18.184 8
3613100 1975 1 9 2.33 -2.123 1 -20.307 9
3613100 1975 1 10 1.97 -1.763 1 -22.07 10
3613100 1975 1 11 1.7 -1.493 1 -23.563 11

Есть ли способ изменить спецификацию дня для первых 9 дней каждого месяца с 1до 01, от 2 до 02 ... от 9 до 09?И чем оставить остальные дни нетронутыми / неизменными?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Я просто зайду и опубликую решение без awk:

paste -d' ' <(<txt-file cut -d' ' -f-3) <(<txt-file cut -d' ' -f4 | xargs -n1 printf "%02d\n") <(<txt-filecut -d' ' -f5-)

Команда извлекает первые 3 столбца из файла, извлекает 4-й столбец из файла и вызывает printf "%02d\n" в каждой строке, извлекает последние столбцы из 5-го столбца и затем объединяет столбцы в пространстве.

0 голосов
/ 02 октября 2018

Еще один awk:

awk '$4~/^.$/{$4="0"$4}1' infile

Или с sed:

sed -E 'h;s/([^ ]* ){3}//;/^. /s//0&/;x;s/(([^ ]* ){3}).*/\1/;s/.$//;G;y/\n/ /' infile
0 голосов
/ 02 октября 2018

попробуйте с:

gawk '{ x=sprintf("%02d",$4); sub($4,x,$4); print $0 }' txt-file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...