Что означает эта команда? (Вопрос о перенаправлении ввода-вывода) [закрыто]

Asumiendo datos en archivoindata:

$ awk '{ ++c[$NF] } END { for (i in c) print c[i], i }' indata
1 /api/2.3/logging
1 /api/3.0/security
6 /api/2.3
2 /api/3.0
1 /api/3.0/logging
1 /api/2.3/security

El script awkrealiza un seguimiento del número de veces que se han mostrado los datos de la última columna e imprime un resumen de esta información al final.

Para obtener solo la versión número , use -F '/'y reemplace $NFcon $3.

Alternativamente:

$ cut -d ' ' -f 3 indata | sort | uniq -c
   6 /api/2.3
   1 /api/2.3/logging
   1 /api/2.3/security
   2 /api/3.0
   1 /api/3.0/logging
   1 /api/3.0/security

Esto elimina el tercer espacio -columna separada de los datos y los ordena. uniq -cluego cuenta cuántas veces ocurre cada entrada única.

Para obtener solo el número de versión con esta variación, reemplace -d ' 'con -d '/'en la llamada a cut.

-4
10.10.2018, 15:49
3 ответа

rm OUTPUT/*удаляет все файлы в папке OUTPUT. >>добавляет вывод команды в файл с именем log_${ENV}. Обычно это только перенаправляет сообщения из stdout (rm без параметра -vничего не должно записывать в stdout ).

2>&1перенаправляет поток 2 (это stderr, где rm записывает свои сообщения об ошибках )в поток 1 (stdout ), который перенаправляется в файл.

Таким образом, эта команда удаляет файлы и записывает ошибки в файл журнала, если таковые имеются.

2
28.01.2020, 05:20

rm OUTPUT/*

удаляет все файлы в папке OUTPUT

>> log_${ENV}

добавляет вывод в файлlog_${ENV}

2>&1

перенаправляет STDERR на STDOUT

Ссылки:[1]

0
28.01.2020, 05:20

Команда идентична

rm OUTPUT/* 2>>log_${ENV}

Как и в другом вашем вопросе , фигурные скобки здесь ничего особенного не сделают. См. также мой ответ там о ENV.

Команда удаляет все, что соответствует OUTPUT/*. Если есть какие-либо ошибки, они добавляются к данному выходному файлу.

В зависимости от оболочки и установленных опций шаблон OUTPUT/*может не только соответствовать всем именам в каталоге OUTPUT, но и совпадать с именами скрытых файлов и каталогов, а может и не совпадать.

Утилита rmне будет выводить данные на свой стандартный вывод (, поэтому команду можно переписать, как указано выше ),но может выдавать ошибки при удалении файлов, которые не существуют или у текущего пользователя нет разрешения на удаление, или если он пытается удалить каталоги (без-r). Эти сообщения об ошибках будут добавлены к данному файлу. Именно использование>>(вместо>)заставляет оболочку открывать выходной файл для добавления, а не для перезаписи.

В исходной команде >>log_${ENV} 2>&1давало командной оболочке указание открыть файл для добавления и отправить ему стандартный поток вывода утилиты rm. Затем оболочка также с битом 2>&1отправит стандартный поток ошибок в то же место. Числа 1и 2обозначают стандартный поток вывода и стандартный поток ошибок соответственно, а когда число не используется, подразумевается стандартный поток вывода.

2
28.01.2020, 05:20

Теги

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