В вашем вопросе нужно немного больше информации, поэтому я предполагаю:
rename
версия их поддерживает rename 's/^([0-9]{2})\.([0-9]{2})\.([0-9]{2})\//$3.$2.$1/' */
Если у вас нет rename
или он есть и он не поддерживает регулярное выражение, это более переносимый подход (, хотя и менее элегантный):
find. -mindepth 1 -maxdepth 1 -type d \
| sed 's ^./ ' \
| grep -E "^([0-9]{2}\.){2}[0-9]{2}$" \
| while IFS=. read dd mm yy ; do mv $dd.$mm.$yy $yy.$mm.$dd ; done
Начальное примечание :ни одна из 44 ячеек поля не равна 7. У вас есть 07
.
Это не awk, это Miller , думаю, это может быть полезно
mlr --csv -N filter -S '$3=="1" && $44=="07" || $1=~"ID"' then cut -f 5,6,7,8,10,13 input.csv >outuput.csv
Некоторые комментарии:
filter
фильтровать по вашим условиям и иметь на выходе строку заголовка;cut
для извлечения нужных полей На выходе вы получите
Коди _Сектор _Активитат | Имя _Сектор _Активация | Коди _Группа _Активитат | Имя _Группа _Активат | Имя _Активация | SN _Оци _Ноктюрн |
---|---|---|---|---|---|
2 | Сервис | 14 | Рестораны, бары и гостиницы (Включая общежития, пансионаты и фонды) | Рестораны | 1 |
Вы можете свести все условия в одно правило шаблона -однако обратите внимание, что, поскольку все ваши поля CSV заключены в кавычки, вам необходимо учитывать это в шаблоне, например.
$ cat prepare.awk
#!/bin/awk -f
BEGIN { FS = OFS = "," }
NR == 1 || $44 == "\"7\"" || $3 == "\"1\"" {
print $5, $6, $7, $8, $10, $13
}
Тогда
$./prepare.awk Input
"Codi_Sector_Activitat","Nom_Sector_Activitat","Codi_Grup_Activitat","Nom_Grup_Activitat","Nom_Activitat","SN_Oci_Nocturn"
"2","Serveis","14","Restaurants, pensions i fondes)","1400002"
"2","Serveis","16","Altres","Serveis a les empreses i oficines","1"
"2","Serveis","16","Altres","Activitats emmagatzematge","1"
Обратите внимание, что все строки заголовков, отличных от -, в вашем образце ввода имеют "1"
в 3-м столбце.
Если вы хотите выбрать строки, в которых оба условия заголовка не -совпадают, измените условие на
NR == 1 || ( $44 == "\"7\"" && $3 == "\"1\"" )