У меня есть текстовый файл дня-и-месяца как это:
день =
8
9
10
15
1
месяц =
3
6
7
10
1
Я должен добавить "0" к строкам, только включая однозначные числа. Я должен записать цикл, чтобы найти однозначное число во всех строках и добавить "0" слева от числа как;
день =
03
06
07
10
01
месяц =
03
06
07
10
01
Вы можете использовать printf
, чтобы дополнить числа 0
соответственно:
while read num; do printf '%0.2d\n' "$num"; done <file.txt
, Чтобы спасти продукцию в том же файле:
while read num; do printf '%0.2d\n' "$num"; done <file.txt | tee file.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
Подход остроты Perl, подходящий как, вероятно, каждая оболочка, предварительно установили жемчуг:
perl -ne 'printf("%02d\n",$_)'<numbers.txt > numbers_out.txt