Сортировка имени файлов Уникально

Возможно, ваш сценарий производит вывод в stdout и stderr , и вы получаете только один из этих потоков, выводимых в ваш файл журнала.

./ my_script.sh | tee log.txt действительно выводит все на терминал, но выводит только stdout в файл журнала.

./ my_script.sh> log.txt 2> & 1 будет делать наоборот, сбрасывая все в файл журнала, но ничего не отображая на экране.

Хитрость заключается в том, чтобы объединить два с tee :

./myscript.sh 2>&1 | tee log.txt

Это перенаправляет stderr ( 2 ) в stdout ( 1 ), затем направляет stdout в tee , который копирует его на терминал и в файл журнала.

Эквивалент zsh multios будет выглядеть так:

./myscript.sh >&1 > log.txt 2>&1

То есть перенаправить stdout как на исходный stdout, так и на log.txt (внутренне через канал на что-то, что работает как tee ] ), а затем перенаправить stderr на него (на конвейер к внутреннему tee -подобному процессу).

1
05.12.2018, 12:19
3 ответа

Используйте printfдля вывода списка файлов внутри каждого каталога и awkдля уникальной идентификации идентификаторов пользователя -

shopt -s nullglob
printf '%s\n' *.txt | awk -F_ '!unique[$1]++ { print $1 }'

и чтобы напечатать только количество, выполните

printf '%s\n' *.txt | awk -F_ '!unique[$1]++ { count++ } END { print count }'
1
27.01.2020, 23:18

Сzsh:

$ typeset -A count
$ for f (<->_*.txt(N)) ((count[${f%%_*}]++))
$ echo $#count users
3 users
$ printf '%s: %s\n' ${(kv)count}
74687: 4
75308: 4
75282: 2
1
27.01.2020, 23:18

Просто передайте результат в grep, а затемsort:

ls -1 | grep -oP "^\d+" | sort | uniq -c

Теперь у вас есть отсортированные данные с идентификаторами USER ID и их количеством.

2
27.01.2020, 23:18

Теги

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