Как переместить последнюю строку в файле? [дубликат]

Usando GNUdate:

$ date -d "2017-11-25 23:35:08"
Sat Nov 25 23:35:08 CET 2017

El resultado estará en la zona horaria local (y en el entorno local ).

Para solicitar explícitamente la zona horaria IST, utilice, por ejemplo,

$ TZ=Asia/Calcutta date -d "2017-11-25 23:35:08"
Sat Nov 25 23:35:08 IST 2017

Para asegurarse de que también obtenga el formato de la configuración regional POSIX/C:

$ LC_TIME=C TZ=Asia/Calcutta date -d "2017-11-25 23:35:08"
Sat Nov 25 23:35:08 IST 2017

Tenga en cuenta que la función strftime()en GNUawk(ymawk)no toma una cadena como su segundo argumento sino una marca de tiempo de Unix. Tendría que convertir la hora a una marca de tiempo de Unix usando mktime()y luego al formato deseado con strftime(). Llamar mktime()implicaría primero dividir la entrada en año, mes, día, etc.

Además, $4estará vacío en su llamada a la función (no hay un cuarto campo en la entrada ).

1
08.09.2018, 13:13
2 ответа

Альтернативная, более медленная и длинная версия.

#!/bin/sh

if [ ! -f "$1" ]
then
    printf "No input file\n"
    exit
fi

FIRST=`head -n 1 "${1}"`
LAST=`tail -n 1 "${1}"`
MID=`sed -n '$d; 2,$p' "${1}"`
printf "${FIRST}\n${LAST}\n${MID}\n"

exit

Медленнее из-за использования head, tailи sedдля доступа к файлу каждый раз. В большом файле (или множестве файлов )это может быть очень заметно.

1
28.04.2021, 23:42
$ printf '4m1\n,p\n' | ed -s file
line 1
line 4
line 2
line 3

Короткий edсценарий

4m1
,p

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

Чтобы сохранить результат в новый файл,вы можете использовать перенаправление, например

printf '4m1\n,p\n' | ed -s file >newfile

или вы можете указать edсохранить файл с помощью

printf '4m1\nw newfile\n' | ed -s file

Команда w newfileсохранит отредактированный буфер в указанный файл. Команда wбез имени файла сохранит файл с исходным именем.

Поскольку построчный редактор edсчитывает файл в память, его можно использовать для подобных целей, если файл имеет разумный, но не слишком большой размер (меньше гигабайт ).


Чтобы переместить последнюю строку, измените 4на $в приведенных выше командах.

1
28.04.2021, 23:42

Теги

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