Переместите строку (строки) данных в отдельный столбец в то время как сдерживающий заголовок (заголовки) строки

Плохая идея, если это не сработает. Я думаю, что ваше беспокойство по поводу того, что profile.d не будет работать, если кто-то не войдет в систему, является законным.

Поместите скрипт init в /etc/rc.d/init.d (я думаю, что это правильный каталог для Red Hat; в Ubuntu это /etc/init.d) для запуска вашего демона. В этом скрипте вы можете объявить/определить любые переменные, которые вам нужны, и когда вы запускаете двоичный файл демона, эти переменные должны быть в scope.

Ссылка здесь объясняет этот процесс и точно, почему он превосходит метод rc.local.

Метод rc.local, упомянутый в другом ответе, не будет работать, потому что переменные, установленные в этом скрипте, больше не определяются, когда выполнение возвращается в Linux INIT. Следовательно, это происходит до того, как кто-нибудь войдет в систему, так что это неявно происходит до запуска profile.d.

1
21.08.2018, 01:59
1 ответ

Попробуйте:

$ awk 'BEGIN { FS="\t" } NR==1 { split($0,header,"\t") ; next } { for(i=2;i<=NF;i++) print $1,header[i],$i }' data
HOUSE TC 55
HOUSE CC 65
HOUSE PC 75
HOUSE TCP 85
HOUSE FTX 95
HOUSE FRX 105
CAR TC 100
CAR CC 200
CAR PC 300
CAR TCP 400
CAR FTX 500
CAR FRX 600
H2 TC 5
H2 CC 10
H2 PC 15
H2 TCP 20
H2 FTX 25
H2 FRX 30
C2 TC 10
C2 CC 20
C2 PC 30
C2 TCP 40
C2 FTX 50
C2 FRX 60

Разбитый на кусочки разделитель:

Установите tab char в качестве разделителя полей входных файлов:

BEGIN { FS="\t" }

Если первая строка (NR==1) разбила его на поля и сохранила в массиве заголовок. Это упрощение короче, чем копирование всех полей $1, $2, ... в цикле и их сохранение. Команда next предотвращает обработку строки 1 также следующим кодом, который предназначен только для других строк. (FS вместо "\t" было бы более последовательным...)

NR==1 { split($0,header,"\t") ; next }

Для каждой второй строки (NR!=1) выведите все поля ($2...$NF) с префиксом $1 и именем поля (header[i]). Установка

{ for(i=2;i<=NF;i++) print $1,header[i],$i }

Установка OFS=FS="\t" в блоке BEGIN заставит распечатать использовать закладку между полями. Я не изменил этого в ответе, так как это потребует переформатирования всех выходных строк.

1
27.01.2020, 23:52

Теги

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