Добавление строки в каждый столбец строки -за исключением первого столбца, переменная длина строки, строка содержится в первом столбце каждой строки

После просмотра некоторых файлов и сравнения моей машины с другой, содержащей другое доменное имя,Мне удалось найти способ изменить доменное имя.

Если dnsdomainname пустое или отсутствует, вторая строка в /etc/hostsбудет иметь вид:

x.x.x.x   yourhostname

Измените вторую строку, чтобы она выглядела так:

x.x.x.x  yourhostname.yourdnsdomainname  yourhostname

Затем вы можете проверить доменное имя DNS в терминале с помощью команды dnsdomainname, и она вернет установленное вами доменное имя.

5
08.03.2021, 07:38
3 ответа

Просто переберите все поля, начиная со второго, и соедините первое поле с тем, что у вас уже есть:

$ awk '{ for(i=2;i<=NF;i++){ $i = $1$i }}1' file
Name1 Name1String111 Name1String112
Name2 Name2String121 Name2String122 Name2String123
Name3 Name3String131 Name3String132 Name3String133 Name3String134

1в конце является сокращением awk для "печатать текущую строку". То же самое можно было бы написать и так:

$ awk '{ for(i=2;i<=NF;i++){ $i = $1$i }; print}' file
Name1 Name1String111 Name1String112
Name2 Name2String121 Name2String122 Name2String123
Name3 Name3String131 Name3String132 Name3String133 Name3String134

Основная идея выше может быть тривиально расширена, чтобы соответствовать всем вашим примерам. NF— это специальная переменная awk, которая содержит количество полей; всегда будет установлено столько полей, сколько есть в текущей строке. Затем awkпозволяет обращаться к определенным полям с помощью переменной. Итак, если вы установите i=5, то $iэквивалентно $5. Затем это позволяет перебирать все поля, используя формат for(i=2;i<=NF;i++) { }, который устанавливает iдля всех чисел от 2до количества полей в этой строке.

10
18.03.2021, 22:27

Если ваше первое поле не может содержать &, тогда все, что вам нужно, это:

$ awk '{gsub(/[[:space:]]+/,"&"$1)}1' file
Name1 Name1String111 Name1String112
Name2 Name2String121 Name2String122 Name2String123
Name3 Name3String131 Name3String132 Name3String133 Name3String134
4
18.03.2021, 22:27

В любом awk:

awk '{ OFS=" "$1; $1=$1 }1' infile

это устанавливает OFS в <SPC><first-column's-value>, затем повторно -оценивает поля на основе OFS с помощью $1=$1, затем печатает (см.awk idiom 1).

можно также записать следующим образом

awk '{ OFS=" "$1 } $1=$1' infile

... но тогда это не удастся для строк, первое поле которых 0; здесь мы можем использовать пустую строку "", чтобы заставить awk для назначения строки, поэтому результат $1=$1""всегда будет оцениваться как истина, и поэтому результат назначения будет истинным, тогда действие печати по умолчанию будет запущено для этих линии тоже:

awk '{ OFS=" "$1 } $1=$1""' infile
2
18.03.2021, 22:27

Теги

Похожие вопросы