Цикл печати в bash

Бит setgid для файлов не имеет ничего общего с каталогами. Бит setgid в вашем примере означает, что исполняемый файл hoststatзапускается с идентификатором группы, установленным на I'd группы mail, предположительно потому, что ему требуется контролируемый доступ к файлам или каталогам, принадлежащим группе mail.

0
14.03.2020, 18:02
2 ответа

Попробуйте это

awk 'FNR==2 {print ("python2 script.py " FILENAME " 1 5.732436 " $1 " f" FILENAME " n")}' *.b
0
28.04.2021, 23:20

Поскольку вы уже используете awk, делайте это с помощью awk, а не в цикле оболочки (вызов awkв таком цикле медленный и ненужный):

awk 'FNR == 2 { 
    printf "python2 script.py %s 1 5.732436 %s f%s n\n", FILENAME, $1, FILENAME
}' *.b

Это вызывает awkсо всеми вашими файлами .bв качестве входных данных. Для второй строки каждого файла он выведет желаемый вывод на стандартный вывод, взяв данные из первого поля текущего входного файла.

FILENAME— это специальная переменная в awk, которая содержит имя текущего входного файла. Аналогично, FNR— номер текущей записи (номер строки )в текущем файле.

Если вы используете GNUawk(скорее всего в системе Linux )и ваши файлы очень большие, вы можете немного ускорить процесс, вызвав nextfileпосле печати. Это приведет к немедленному переходу к следующему входному файлу, без дальнейшего чтения текущего файла.

awk 'FNR == 2 { 
    printf "python2 script.py %s 1 5.732436 %s f%s n\n", FILENAME, $1, FILENAME
    nextfile
}' *.b

nextfileтакже поддерживается mawk.

1
28.04.2021, 23:20

Теги

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