mv backup1.tar "$(date +"%m-%d-%y")"
$ (...)
- синтаксис, альтернативный для ". Это сначала выполнит $ (date + "% m-% d-% y")
, так что командная строка действительно станет mv backup1.tar 01-14-16
.
Обратите внимание, что здесь было бы неплохо проверить, например если файл уже существует.
используя ваш пример файла
awk 'BEGIN {RS="\n\n\n";FS="\n\n";OFS="*";ORS=""} {print $1,$2,$3,$4,$5}' file |awk -F'*' '{for(i=1; i<=NF; i++) c[i]=$i; n=asort(c); for (i=1; i<=n; i++) printf "%s%s*", c[i], (i<n?OFS:RS); delete c}' |sed 's/^*//' |awk -F'*' '{print $5"*"$1"*"$2"*"$3"*"$4}' |sort |awk -F'*' 'BEGIN{OFS="\n\n";ORS="\n\n\n"} {print $1,$2,$3,$4,$5;}'
Преобразование каждого блока текста в строки и использование ' *' для разделения полей
awk 'BEGIN {RS="\n\n\n";FS="\n\n";OFS="*";ORS=""} {print $1,$2,$3,$4,$5}' file
dn: 2*attr1: b*attr2: a*attr1: a*attr1: c
dn: 3*attr2: a*attr1: c*attr1: b*attr1: a
dn: 1*attr1: a*attr1: c*attr1: b*attr2: a
Сортировка полей по строкам и использование «*» для разделения полей
awk 'BEGIN {RS="\n\n\n";FS="\n\n";OFS="*";ORS=""} {print $1,$2,$3,$4,$5}' file |awk -F'*' '{for(i=1; i<=NF; i++) c[i]=$i; n=asort(c); for (i=1; i<=n; i++) printf "%s%s*", c[i], (i<n?OFS:RS); delete c}' |sed 's/^*//'
attr1: a *attr1: b *attr1: c *attr2: a *dn: 2
attr1: a *attr1: b *attr1: c *attr2: a *dn: 3
attr1: a *attr1: b *attr1: c *attr2: a *dn: 1
переставить поля в строках так, чтобы «напечатать dn :x» на первом месте
awk 'BEGIN {RS="\n\n\n";FS="\n\n";OFS="*";ORS=""} {print $1,$2,$3,$4,$5}' file |awk -F'*' '{for(i=1; i<=NF; i++) c[i]=$i; n=asort(c); for (i=1; i<=n; i++) printf "%s%s*", c[i], (i<n?OFS:RS); delete c}' |sed 's/^*//' |awk -F'*' '{print $5"*"$1"*"$2"*"$3"*"$4}'
dn: 2*attr1: a *attr1: b *attr1: c *attr2: a
dn: 3*attr1: a *attr1: b *attr1: c *attr2: a
dn: 1*attr1: a *attr1: b *attr1: c *attr2: a
Сортировка строк по первому столбцу или полю
awk 'BEGIN {RS="\n\n\n";FS="\n\n";OFS="*";ORS=""} {print $1,$2,$3,$4,$5}' file |awk -F'*' '{for(i=1; i<=NF; i++) c[i]=$i; n=asort(c); for (i=1; i<=n; i++) printf "%s%s*", c[i], (i<n?OFS:RS); delete c}' |sed 's/^*//' |awk -F'*' '{print $5"*"$1"*"$2"*"$3"*"$4}' |sort
dn: 1*attr1: a *attr1: b *attr1: c *attr2: a
dn: 2*attr1: a *attr1: b *attr1: c *attr2: a
dn: 3*attr1: a *attr1: b *attr1: c *attr2: a
Преобразование строк в один столбец и вставка пустых строк
awk 'BEGIN {RS="\n\n\n";FS="\n\n";OFS="*";ORS=""} {print $1,$2,$3,$4,$5}' file |awk -F'*' '{for(i=1; i<=NF; i++) c[i]=$i; n=asort(c); for (i=1; i<=n; i++) printf "%s%s*", c[i], (i<n?OFS:RS); delete c}' |sed 's/^*//' |awk -F'*' '{print $5"*"$1"*"$2"*"$3"*"$4}' |sort |awk -F'*' 'BEGIN{OFS="\n\n";ORS="\n\n\n"} {print $1,$2,$3,$4,$5;}'
dn: 1
attr1: a
attr1: b
attr1: c
attr2: a
dn: 2
attr1: a
attr1: b
attr1: c
attr2: a
dn: 3
attr1: a
attr1: b
attr1: c
attr2: a
Я знаю, что использую слишком много шагов.