Как это распечатать в bash, пожалуйста?
for file in *.b; do
a="$(awk 'NR==2{print $1}' "$file")"
printf ('python2 script.py' $file '1 5.732436' $a "f$file" 'n')
done
Я хотел бы вывести строку «python2 script.py», имя файла, строки «1 5.732436», значение переменной a, имя файла и f перед и строку n.
Желаемый вывод (для каталога с файлами: file1.b, file2.b, file3.b:
python2 script.py file1.b 1 5.732436 5.5 ffile1.b n
python2 script.py file2.b 1 5.732436 3.2 ffile2.b n
python2 script.py file3.b 1 5.732436 1.2 ffile3.b n
решение1
Поскольку вы уже используете 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
— это текущий номер записи (номер строки) в текущем файле.
Если вы используете GNU awk
(вероятно, в системе 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
.
решение2
Попробуй это
awk 'FNR==2 {print ("python2 script.py " FILENAME " 1 5.732436 " $1 " f" FILENAME " n")}' *.b