簡體   English   中英

在Unix Shell腳本中嵌套for循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM