awk не возвращает требуемый результат

cd lotsafiles
for i in {1..20000}; do
  dirnum="$(((i/500)+1))"
  mkdir -p "dir_${dirnum}" # using -p allows this to be less noisy on repeat runs
  mv "file${i}.png" "dir_${dirnum}"/
done
0
29.01.2021, 13:45
1 ответ

Переменная IGNORECASE— это специальная переменная, которая влияет на чувствительность к регистру в регулярных выражениях и строковых операциях (также при разделении полей, если FSявляется регулярным выражением, но см. руководство GNU awkпо вашей системе для детали ), но только для GNU awk. Никакой другой awkне имеет этой переменной.

Из того, что вы говорите в комментариях , кажется, что по умолчанию awkу вас mawk, а не GNU awk.

Чтобы выполнить сопоставление регулярного выражения без учета регистра в не -GNU awk, просто преобразуйте строку в нижний или верхний регистр, используя tolower()или toupper(), а затем используйте регулярные строчные или прописные буквы. выражение:

awk -F, 'tolower($0) ~ /fiji/ { print NR, "-", $0 }' currencies.csv
awk -F, 'toupper($0) ~ /FIJI/ { print NR, "-", $0 }' currencies.csv

Вы также можете использовать grepдля задачи, которую вы здесь выполняете:

grep -n -i 'fiji' currencies.csv

Выходные данные будут иметь слегка другой формат, где каждая строка будет иметь префикс n:, где n— номер строки исходного файла. Очевидно, вы могли бы исправить это, передав вывод через sed 's/:/ - /'.

2
18.03.2021, 22:33

Теги

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