$ sh bar этот оператор является вопросом [дубликат]

Una solución completamente en GNU awk es la siguiente:

awk '{ split($0,slt,"/");datspec=mktime(slt[3]" "slt[2]" "slt[1]" 00 00 00");print strftime("%d-%b-%Y",datspec) }' <<< "19/10/2014"

Tomando la fecha como entrada, primero dividimos los datos en una matriz (slt )para obtener la fecha, el mes y el año. Luego usamos la función mktime de awk para obtener una especificación de fecha que luego usa la función sttftime de awk para obtener la fecha en el formato correcto.

Con un csv, $0 sería el número correspondiente al campo delimitado por comas que tiene la fecha.

-4
04.06.2017, 11:30
2 ответа

Давайте разберемся. Эта команда состоит из трех частей:

sh

sh — имя запускаемой программы, в данном случае это sh.

< foo

< символ говорит, что слово, следующее за ним, является именем файла и управляет оболочкой (оболочкой, которая выполняет команду, она не имеет ничего общего с sh, вызываемой программой, которая является оболочкой ), чтобы соединить стандартный ввод программы с содержимым файла, имя которого следует за символом, в данном случае foo.

> bar

Символ > дает команду оболочке соединить стандартный вывод выполняемой программы с файлом bar.

Эти пути перенаправления устанавливаются до начала выполнения программы.

Итак, вся команда sh < foo > bar при запуске в оболочке. заставляет программу sh читать команды из файла foo и сохранять результат в файле bar. Ошибка, если файл foo не существует. Поведение оболочки в зависимости от того, существует файл bar или нет, определяется опцией noclobber используемой вами оболочки.

0
28.01.2020, 05:20

Вообще,

$ utility <input >output

приведет к выполнению utilityс его стандартным входным потоком , подключенным к файлу input, и его стандартным выходным потоком , подключенным к файлу output.

$в начале строки — это приглашение оболочки (вы не будете вводить это ).

В случае sh, который является интерпретатором команд оболочки, это заставит shчитать и выполнять команды оболочки из входного файла(fooв вашем случае )и записывать любые выходные данные в выходной файл(barв вашем случае ).Диагностические сообщения (ошибки и предупреждения )все равно будут отображаться на терминале, так как они обычно записываются в стандартный поток ошибок , который упомянутая вами командная строка никуда конкретно не перенаправляет.

Упомянутая вами команда имеет более или менее тот же эффект, что и

$ sh foo >bar

, так как shможет читать из файла, указанного в командной строке, и будет читать из стандартного потока ввода, только если файл не указан.

0
28.01.2020, 05:20

Теги

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