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", 파일 이름, 변수 a의 문자열 "1 5.732436" 값, 파일 이름과 이전 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
이미 this 를 사용하고 있으므로 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(아마도 Linux 시스템)를 사용하고 있고 파일이 매우 큰 경우 awk
인쇄 후 호출하여 작업 속도를 높일 수 있습니다. 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