Использование AWK для проверки соответствия имени файла заданному формату - PullRequest
0 голосов
/ 26 февраля 2019

Есть ли способ проверить имя файла с помощью программы в AWK.Поэтому мне нужен код, чтобы проверить, соответствуют ли два файла в одном каталоге этому формату именования

nppcase _ *** _ ****** header **************. CSV

это не удастся nppcaadese _ *** _ ****** bvdhistack **************.csv

это пройдет nppcase_lpc_abc123_header_anychara.csv

так что уточните * любые символы, а остальные буквальные.

И если тест провалился, программа должна вывестиоператор печати, затем выйдите из программы.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Вы можете просто использовать ls и pipe для awk в командной строке с регулярным выражением.Нечто подобное будет работать.Вам нужно будет использовать «.»(подстановочный знак) вместо символа «*».Вы также избежите последнего "."так как вы хотите буквальный период, а не подстановочный знак.

ls | awk '{if ($1 ~ /nppcase_..._......header..............\.csv/) { print $0 " matches the format" } else { print $0 " does not match!"}}'
0 голосов
/ 26 февраля 2019

Хотя, как сказал Джеймс сэр, формат вашего файла неясен, не могли бы вы попытаться выполнить следующее (только на основе вашего вопроса).

awk 'FILENAME!~/nppcase_*_.*header.*\.csv/{print "Seems " FILENAME " is NOT following pattern so exiting now...";exit} 1' nppcase_***_******header**************.csv  nppcase_***_******header12131**************.csv

Логика для приведенного выше кода проста, она будет продолжать печататьсодержимое файла Input_file, если оно соответствует регулярному выражению, если NOT, то оно выведет сообщение на экран и выйдет из программы awk.

0 голосов
/ 26 февраля 2019

Ну, так как ваш формат именования мне неясен, я буду использовать более простое регулярное выражение, чтобы точно соответствовать трем символам, таким как foo и bar:

$ awk 'BEGIN{for(i=1;i<ARGC;i++)if(ARGV[i]!~/^...$/){print "statement";exit}}' foo file
statement

Объяснил:

$ awk '
BEGIN {
    for(i=1;i<ARGC;i++)          # loop filenames given as parameters
        if(ARGV[i]!~/^...$/) {   # if filename does not match regex ...
            print "statement"    # print statement
            exit 1               # and exit with a non-zero value
    }
    exit                         # exit anyway
}' foo file                      # files you want to check
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...