awk извлекает столбцы, соответствующие условию

В вашем вопросе нужно немного больше информации, поэтому я предполагаю:

  • под всеми папками вы имеете в виду все папки в текущем каталоге
  • упомянув регулярное выражение, вы не упомянули ОС, поэтому я работаю на основании того, что ваша 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
2
25.05.2021, 22:23
2 ответа

Начальное примечание :ни одна из 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
5
28.07.2021, 11:29

Вы можете свести все условия в одно правило шаблона -однако обратите внимание, что, поскольку все ваши поля 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\"" )
3
28.07.2021, 11:29

Теги

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