請問如何在 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
由於您已經在使用awk
,請使用awk
而不是在 shell 循環中執行此操作(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