我試圖更改第2,3和4列中的數字。要做到這一點,我有以下腳本在awk和bash腳本中轉義
for i in 0.8 0.9 1 1.1 1.2; do
original=10.9398135077
fraction=`bc <<< "$i*$original"`
convert=0.529177
awk '{printf "%-2s %10.5f %10.5f %10.5f\n", $1, ($2*"\$fraction"*"\$convert"), ($3*"\$fraction"*"\$convert"), ($4*"\$fraction"*"\$convert")}' temp2_${i}.txt > coord_${i}.txt
done
和我temp2_0.8.txt看起來像以下:
Cu -0.000000000 0.000000000 -0.000000000
Cu 0.500000000 -0.000000000 0.500000000
Cu 0.000000000 0.500000000 0.500000000
Cu 0.500000000 0.500000000 0.000000000
S 0.398420013 0.398420013 0.398420013
S 0.898420013 0.398420013 0.101579987
S 0.398420013 0.101579987 0.898420013
S 0.101579987 0.898420013 0.398420013
S 0.601579987 0.601579987 0.601579987
S 0.898420013 0.101579987 0.601579987
S 0.101579987 0.601579987 0.898420013
S 0.601579987 0.898420013 0.101579987
但如果我執行我的劇本,我得到這個消息:
awk: warning: escape sequence `\$' treated as plain `$'
我在所有轉換後的文件中獲得0.00000。看來我沒有在awk中隱藏關鍵字....我怎樣才能用awk正確地將「分數」和「轉換」到列號2,3和4?
添加:)我用\ $分數,而不是「\ $分數」,但它給了我錯誤「反斜線不就行了最後一個字符」
在單引號內部,shell忽略美元和反斜槓 - 只有單引號很有趣。 awk腳本因此得到錯誤的值。使用'-v variable =「$ value」'將shell變量傳遞給腳本。爲什麼要打擾'bc'? 'awk'可以相當愉快地繁殖。 –
@JonathanLeffler謝謝你,-v作品〜!這比我想象的要簡單。我使用bc的原因是將bash腳本中的$ i值相乘,以便在腳本的不同部分使用它。但我認爲你的想法也很好:)謝謝 – exsonic01