1
我試圖瞭解環文件重定向的外殼是如何工作的,所以我寫了下面的代碼:文件重定向在外殼環
#!/bin/sh
while IFS='' read -r line; do
echo 'reading '$line
awk -F, '{sub(/.*/,"Completed",$2);print}'
done<$1
我給下面的輸入文件腳本:
hello,hi,how are you
i,am,good
上述文件運行腳本的輸出是:
reading hello,hi,how are you
i Completed good
我はs預期輸出的形式:
reading hello,hi,how are you
hello,Completed,how are you
i Completed good
reading i,am,good
hello,Completed,how are you
i Completed good
爲什麼循環不打印「閱讀」的兩條線?而且,爲什麼awk的替換不會在第一行發生?任何人都可以請解釋腳本的輸出嗎?
您的'awk'命令將從標準輸入中讀取,在這種情況下是$ 1的重定向:所以'read'讀取$ 1'的第一行,然後'awk'讀取剩餘的行。也許你想'awk -F'{sub(/.*/,「Completed」,$ 2); print}'<<<「$ line」'將'$ line'的內容發送到'awk'。 –
爲什麼這個評論不是答案? :) – Dominik
閱讀http://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice –