[英]Nested for loop in unix shell scripting
我有兩個變量A和B分別代表文件主題和得分,如下所示
A=contents of file 'subject' which contains "English Hindi Telugu"
B=contents of file 'Scores' which contains "60 60 10"
我想以各種方式用標記標記主題,即
english ==> 60 hindi ==> 60 telugu ===>10
我實現如下,但顯示出奇怪的結果:
English ==> 60 English ==> 60 English ==> 10 Hindi ==> 60
Hindi ==> 60 Hindi ==> 10 Telugu ==> 60 Telugu ==> 60 Telugu ==> 10
我希望結果如下所示= => 60 Hindi ==> 60 Telugu ==> 10
#!/bin/ksh
A=`cat subject`
B=`cat Scores`
for sub in $A
do
for score in $B
do
echo " $sub ==> $score "
done
done
如果文件中的單詞出現在單獨的行中,則這樣會更容易一些,例如
$ cat subject
English
Hindi
Telugu
$ cat Scores
60
60
10
然后使用一些漂亮的Unix哲學:
$ paste subject Scores | sed 's/\t/ ==> /'
English ==> 60
Hindi ==> 60
Telugu ==> 10
paste
實用程序負責打開多個文件並逐行同步讀取它們。
要轉換原始文件,請使用以下方法:
$ printf '%s\n' $(cat subject)
English
Hindi
Telugu
不確定執行此操作的實際用例是什么,但是您可以定義兩個文件描述符並一起讀取並使用printf
它們一起打印
#!/bin/bash
while IFS= read -r subjectVal <&4 && IFS= read -r scoreVal <&3; do
printf "%s%s\t" "$subjectVal"" ==> ""$scoreVal" # To have them all in a single-line
# printf "%s%s\n" "$subjectVal"" ==> ""$scoreVal" # To print them in new-lines
done 4<subject 3<scores
printf "\n"
以./script.sh
身份運行腳本將產生類似以下內容的輸出:-
English ==> 60 Hindi ==> 60 Telugu ==> 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.