Я хотел бы преобразовать
blue blue red green
в:
color.1=blue color.2=blue color.3=red color.4=green
Какие-либо выводы о том, как справиться с этим? sed, awk и т. д.
В Bash:
colors="blue blue red green"
i=1
for c in $colors; do
echo -n "color.$((i++))=$c "
done
версия Командной строки (легкий к copy& вставьте к терминалу) с 2 строками - установка переменных сначала и затем основного сценария:
colors="blue blue red green"; i=1
for c in $colors; do echo -n "color.$((i++))=$c "; done
Вот является Python путем:
#!/usr/bin/env python2
input_string = 'blue blue red green'
count = 1
for value in input_string.split():
print 'color.{0}={1}'.format(count, value),
count += 1
Вывод: color.1=blue color.2=blue color.3=red color.4=green
Вот sed
путь:
$ n=1;x=color;echo "blue blue red green" | sed -rn "s/^([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)$/$x\.$n=\1 $x\.$((n+1))=\2 $x\.$((n+2))=\3 $x\.$((n+3))=\4/p"
Вывод: color.1=blue color.2=blue color.3=red color.4=green
Здесь мы использовали переменную n
для хранения 1
и x
для хранения строки color
, затем использовали группировку и backreferencing для получения желаемого результата.
Вот awk решение, если Ваши цвета так больше:
awk '{ printf("color.%d=%s ",NR, $0 ) }' RS='[[:blank:]]+' infile
color.1=blue color.2=blue color.3=red color.4=green
RS
определяет Пробелы/Вкладки как Разделитель записей со случаями одного или нескольких раз +
. Затем printf
управляйте печатают текущее Количество Записи/поля и затем печатают целую запись/поле $0
от infile как входной файл.