Команда awk не удалось во время перенаправления с нулевым значением устойчивости

Вы можете использовать test аналогично find , например

dpkg -L somepackage | while read -r f; do [ ! -d "$f" -a -x "$f" ] && printf "$f\n"; done

для найти! -type d -executable

0
20.07.2018, 10:20
2 ответа

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

Используя -vNoOfRecordsPerFile, вы говорите, что хотите присвоить значение переменной awkв командной строке, но никогда не присваиваете ей значение. Это должно привести к ошибке, отличной от той, о которой вы говорите.Если вы хотите, чтобы он принимал значение переменной оболочки с тем же именем, используйте -v NoOfRecordsPerFile="$NoOfRecordsPerFile".

Итак, последняя команда awkстановится:

awk -v NoOfRecordsPerFile="$NoOfRecordsPerFile" '
    ((NR-1) % NoOfRecordsPerFile) == 0 { x = FILENAME "-" ++i ".txt" }
                                       { print > x                   }' "$FILENAME"
2
28.01.2020, 02:31

Ваша ошибка связана с условием NR%NoOfRecordsPerFile==1, которое не выполняется перед использованием переменной x, поэтому эта переменная не установлена.

Вместо awkможно использоватьsplit:

split -l 50 -d --additional-suffix='.txt' --numeric-suffixes=1 A_20 'A_20-'

Это разбивает файл A_20на 2 файла по 50 строк с именами A_20-01.txtи A_20-02.txt.


Если вы хотите использовать awk, вы можете попробовать это:

awk -v lineno=50 '((NR-1)%lineno)==0{cnt++;f=FILENAME "-" cnt ".txt"}{print >>f}' A_20
0
28.01.2020, 02:31

Теги

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