有人可以爲我解釋這是什麼循環?解釋shell腳本代碼「for循環」
for file in `ls *SC*`; do
for content in `cat $file `; do
scid=`echo $file|awk -F'.' '{print $1}'`
printf "%-10s%s\n" $scid $content
done
done > text1
有人可以爲我解釋這是什麼循環?解釋shell腳本代碼「for循環」
for file in `ls *SC*`; do
for content in `cat $file `; do
scid=`echo $file|awk -F'.' '{print $1}'`
printf "%-10s%s\n" $scid $content
done
done > text1
在這個循環中寫入的shell代碼是錯誤的(性能,奇怪文件名後的錯誤)。
外環:
for file in `ls *SC*`; do
done > text1
試圖找到與SC的所有文件名,用它做什麼,以及輸出寫入文本1。更好的是:for file in *SC*; do
內環:
for content in `cat $file `; do
done
做一些與文件中的每一個字。
scid=`echo $file|awk -F'.' '{print $1}'`
此行屬於內部循環之外。它從第一個點中刪除了一些東西(刪除文件名中的擴展名爲1個點)。您可以使用cut
或更快的${file%.*}
。
printf "%-10s%s\n" $scid $content
打印截止文件名(最少10個位置:追加空格),第一個字,當SCID或內容包含特殊字符(最好printf "%-10s%s\n" "$scid" "$content"
)都可能會失敗。
更好的是'awk'f!= FILENAME {f = FILENAME; split(FILENAME,x,「[。]」); } {printf「%-10s%s \ n」,x [1],$ 0}'* SC *' – tripleee
@tripleee:我只試圖解釋循環,我仍然不明白需要什麼。每個輸出行(應以文件基名開頭)應該有一個單詞還是一行輸入文件?是的,awk永遠是值得了解的。 –
嘗試在http://superuser.com上做這個問題,你可以在每行的beggning處使用4個空格來使其格式像'code',參見[help page](http://stackoverflow.com /編輯的幫助#註釋的格式)。 –
您可以試試[eplainshell](http://explainshell.com/explain?cmd=for+file+in+%60ls+*SC*%60%3B+do++++for+content+in+%60cat+%24file+% 60%3B +做+++++ SCID%3D%60echo +%24file%7Cawk + -F%27%27 +%27%7Bprint +%241%7D%27%60%3B +++++的printf +%22% 25-10s%25s%5Cn%22 +%24scid +%24content%3B +++ done%3B + done +%3E + text1) –
使用'$(...)'代替命令周圍的反引號;找到正確的東西比較容易,尤其是如果你想要嵌套這個符號的話。 –