Проблема в добавлении столбца с awk

Я не полагаю, что существует любой свойственный риск, это - что-то, что сделано просто для создания разделения между тем, что считают системными учетными записями и учетными записями пользователей. Практика использования чисел ниже 500, на основе моего опыта является измом Redhat, и действительно не чем иным как этим.

На Солярисе я видел, что пользователи быть присвоенными номерами, запускающимися в 100 также, только к несколько лет спустя, обнаруживают, что при слиянии систем 2 меньших отделов вместе вызывает своего рода кошмар, так как были многочисленные пользователи через 2 отдела, которым присвоили тот же UID/GID.

Это - действительно основной риск/головная боль при присвоении UIDs. Так как UID - то, что в конечном счете записано в inode для данных файлов/каталогов пользователя, Вы не хотите итог, должны в будущем работать крупный findпоиск регистрирует, которые принадлежат UID 1234 и имеющий необходимость изменить их на 5 678.

Таким образом путем помещения некоторой мысли в выбор UIDs, администраторы могут избежать головной боли в будущем.

Использование 500 и выше является просто попыткой Redhat (и другой Unixes), чтобы дать себе достаточно буфера, что любые системные учетные записи, которые, возможно, должны были бы быть созданы, не будут смешаны с UIDs, которые присвоены пользователям.

/etc/login.defs

Кстати, номер 500 управляется этой установкой в файле конфигурации, /etc/login.defs.

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN           500
UID_MAX         60000

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN           500
GID_MAX         60000

Можно изменить это на что-либо, что Вы хотите, если требуется переопределить поведение по умолчанию useradd/adduser команды.

Страница справочника Useradd

Если Вы смотрите на useradd страница справочника Вы заметите эту часть, которая обсуждает значение по умолчанию для GID, но этот комментарий также применим к UIDs также:

выборка

-g, --gid GROUP
    The group name or number of the user´s initial login group. The group name 
    must exist. A group number must refer to an already existing group.

    If not specified, the behavior of useradd will depend on the USERGROUPS_ENAB 
    variable in /etc/login.defs. If this variable is set to yes 
    (or -U/--user-group is specified on the command line), a group will be 
    created for the user, with the same name as her loginname. If the variable 
    is set to no (or -N/--no-user-group is specified on the command line), 
    useradd will set the primary group of the new user to the value specified by 
    the GROUP variable in /etc/default/useradd, or 100 by default.

Системные учетные записи

Еще одна вещи заметить в useradd страница справочника, это обдумало системное поколение учетной записи.

выборка

-r, --system
    Create a system account.

    System users will be created with no aging information in /etc/shadow, 
    and their numeric identifiers are choosen in the SYS_UID_MIN-SYS_UID_MAX 
    range, defined in /etc/login.defs, instead of UID_MIN-UID_MAX (and their 
    GID counterparts for the creation of groups).

    Note that useradd will not create a home directory for such an user, 
    regardless of the default setting in /etc/login.defs (CREATE_HOME). You 
    have to specify the -m options if you want a home directory for a system 
    account to be created.

Это - этот метод (useradd -r ...) это часто - времена, используемые путем сценариев, это включено в различные кормушки пакета, такие как об/мин, когда пакет устанавливается. При сценариях его этот путь позволяет системе автоматически выбирать следующий доступный UID/GID в данной системе без риска продвижения на UIDs/GIDs, уже присвоенный пользователям системы.

3
20.08.2014, 01:08
3 ответа

Если .csv находится в формате DOS, то другой вариант может быть:

tr -d \\r <input.csv | sed 's/$/,new_col/'

... который будет обрабатывать все это одним кадром.

0
27.01.2020, 21:23

Ваш входной csv файл находится в формате DOS. Microsoft DOS / Windows использует возврат каретки ( \ r , ^ M , код ASCII 13), за которым следует перевод строки ( \ n , ^ J или код ASCII 10) в конце каждой строки, в то время как Linux / Unix использует только перевод строки.

Чтобы исправить это, запустите:

$ dos2unix file.csv
dos2unix: converting file file.csv to Unix format ... 
$ awk '{print $0",new_col"}' file.csv

Обратите внимание на запятую перед new_col . Без него print объединяет new_col непосредственно в конец $ 0 . Нет необходимости указывать разделитель полей ( -F ), потому что вы не разделяете строку ввода на поля - вы используете только $ 0 .

3
27.01.2020, 21:23

Это сработает? awk -F, '{$ (NF + 1) = "new_col";} 1' OFS =, input.txt .

Это выведет новую таблицу в командную строку. В этом примере я добавил выходной файл ( output.csv на всякий случай).

Перед запуском команды:

$ cat input.csv
68,110,0.362,0.101
11,98,0.405,0.101
57,94,0.374,0.100
61,123,0.342,0.100
124,130,0.298,0.100

Выполнение команды:

$ awk -F, '{$(NF+1)="new_col";}1' OFS=, input.csv > output.csv

Проверка выходного файла:

$ cat output.csv
68,110,0.362,0.101,new_col
11,98,0.405,0.101,new_col
57,94,0.374,0.100,new_col
61,123,0.342,0.100,new_col
124,130,0.298,0.100,new_col

Пример страницы

0
27.01.2020, 21:23

Теги

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