У меня есть текстовый текстовый файл типа «день-месяц»:
day =
8
9
10
15
1
month =
3
6
7
10
1
Мне нужно добавьте «0» в строки, включая только одноразрядные числа. Мне нужно написать цикл, чтобы найти одноразрядное число во всех строках и добавить «0» слева от числа, например:
day =
03
06
07
10
01
month =
03
06
07
10
01
Perl one-liner approach, подходящий, поскольку, вероятно, каждая оболочка имеет предустановленную perl:
perl -ne 'printf("%02d\n",$_)'<numbers.txt > numbers_out.txt
Использование sed - инструмент, подходящий для задач в виде пакетного или потокового редактирования текстовых файлов или потоков.
в качестве фильтра, который будет использоваться в трубе: sed 's/^[0-9]$/0&/' в качестве команды для редактирования файла : sed -i 's/^[0-9]$/0&/' numfile.txtКод добавит 0 к строкам, содержащим только одну цифру 0 - 9. Вместо [0-9] вы также можете использовать [[:digit:]].
awk. Перенаправление вывода обратно в файл с созданием tmp.txt и заменой исходного файла на tmp.txt после выполнения команды.
Команда
awk '/^[[:digit:]]$/ {$1="0"$1}1' numFile.txt > tmp.txt && mv tmp.txt numFile.txt
Пример вывода
xieerqi:$ cat numFile.txt
1
2
3
4
5
6
7
8
9
10
11
12
xieerqi:$ awk '/^[[:digit:]]$/ {$1="0"$1}1' numFile.txt > tmp.txt && mv tmp.txt numFile.txt
xieerqi:$ cat numFile.txt
01
02
03
04
05
06
07
08
09
10
11
12