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.
Давайте разберемся. Эта команда состоит из трех частей:
sh
sh
— имя запускаемой программы, в данном случае это sh
.
< foo
<
символ говорит, что слово, следующее за ним, является именем файла и управляет оболочкой (оболочкой, которая выполняет команду, она не имеет ничего общего с sh, вызываемой программой, которая является оболочкой ), чтобы соединить стандартный ввод программы с содержимым файла, имя которого следует за символом, в данном случае foo
.
> bar
Символ >
дает команду оболочке соединить стандартный вывод выполняемой программы с файлом bar
.
Эти пути перенаправления устанавливаются до начала выполнения программы.
Итак, вся команда sh < foo > bar
при запуске в оболочке. заставляет программу sh
читать команды из файла foo
и сохранять результат в файле bar
. Ошибка, если файл foo
не существует. Поведение оболочки в зависимости от того, существует файл bar
или нет, определяется опцией noclobber
используемой вами оболочки.
Вообще,
$ utility <input >output
приведет к выполнению utility
с его стандартным входным потоком , подключенным к файлу input
, и его стандартным выходным потоком , подключенным к файлу output
.
$
в начале строки — это приглашение оболочки (вы не будете вводить это ).
В случае sh
, который является интерпретатором команд оболочки, это заставит sh
читать и выполнять команды оболочки из входного файла(foo
в вашем случае )и записывать любые выходные данные в выходной файл(bar
в вашем случае ).Диагностические сообщения (ошибки и предупреждения )все равно будут отображаться на терминале, так как они обычно записываются в стандартный поток ошибок , который упомянутая вами командная строка никуда конкретно не перенаправляет.
Упомянутая вами команда имеет более или менее тот же эффект, что и
$ sh foo >bar
, так как sh
может читать из файла, указанного в командной строке, и будет читать из стандартного потока ввода, только если файл не указан.