Как удалить дубликаты имен и массив печати после уникальных имен

Кто-то с похожей системой может создать для вас список разрешений. Я предлагаю сделать это для каждого каталога отдельно:

#! /bin/bash
# as root
cd /
shopt -s extglob
for dir in /!(home|proc|sys|lost+found|cgroup); do
    test -d "$dir" || continue
    time getfacl --recursive "$dir" >"$dir.acl"
done

В вашей системе вы применяете данные с помощью: setfacl --restore = file

Возможно, эту информацию также можно извлечь из управления пакетами. Однако сначала я должен подумать об этом.

Для этого вам не нужно использовать ACL. Но инструменты ACL, конечно же, должны быть установлены. Но я предполагаю, что они по умолчанию.

0
07.05.2019, 16:56
2 ответа

Больше того же

awk '$1 != p { if (p>"") {printf "\n"} printf "%s",$1; p=$1 } { printf "\t%s",$2 } END { if(p>"") {printf "\n"} }' datafile

K00002  gene_65472      gene_212051     gene_403626
K00003  gene_666        gene_5168       gene_7635       gene_12687      gene_175295     gene_647659     gene_663019
K00004  gene_88381
K00005  gene_30485      gene_193699     gene_256294     gene_307497

Если вы не хотите разделения с помощью вкладки , измените \tна пробел.

Вот как это работает:

# Each line is processed in turn. "p" is the previous line's key field value

# Key field isn't the same as before
$1 != p {
    # Flush this line if we have printed something already
    if (p > "") { printf "\n" }

    # Print the key field name and set it as the current key field
    printf "%s", $1; p = $1
}

# Every line, print the second value on the line
{ printf "\t%s", $2 }

# No more input. Flush the line if we have already printed something
END {
    if (p > "") { printf "\n" }
}

Судя по расплывчатымкомментариям , которые вы делаете против всех ответов, основная проблема заключается в том, что вы используете файл данных, сгенерированный в системе Windows, и ожидая, что он будет работать на платформе UNIX/Linux. Не делай этого. Или, если необходимо, сначала преобразуйте файл в правильный формат.

dos2unix < datafile | awk '...'       # As above

tr -d '\r' < data file | awk '...'    # Also as above
3
28.01.2020, 02:23

с использованием Миллераhttp://johnkerl.org/miller/doc
с

mlr --csv --implicit-csv-header --headerless-csv-output cat -n -g 1 then label a,b,c then reshape -s a,c then unsparsify --fill-with "" input.csv

и этот пример ввода csv

A,234
A,4945
B,8798
B,8798
B,790

У вас будет

A,234,4945,
B,8798,8798,790
0
28.01.2020, 02:23

Теги

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