2016-10-12 90 views
0

我有兩個變量命名爲A和B的主題文件和分數像下面在UNIX shell腳本的嵌套的循環

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 

我希望結果是像下面趙運SH ==> 60印地文==> 60泰盧固語==> 10

#!/bin/ksh 
A=`cat subject` 
B=`cat Scores` 
for sub in $A 
do 
    for score in $B 
    do 
    echo " $sub ==> $score " 
    done 
done 
+0

可能的複製(http://stackoverflow.com/questions/9885338/reading-從兩個文件在一個循環中的線) – tripleee

+1

嵌套循環必須重複每個迭代的外循環內循環。這顯然不是你想要的;你應該澄清標題。 – tripleee

回答

1

我不知道什麼是您的實際使用情況做這個,但是你可以定義兩個文件描述符,並一起閱讀並打印出來一起使用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 
2

這將在一定程度上的文件,如果容易的話出現在不同的行,如

$ cat subject 
English 
Hindi 
Telugu 
$ cat Scores 
60 
60 
10 

然後用一些漂亮的Unix哲學:

$ paste subject Scores | sed 's/\t/ ==> /' 
English ==> 60 
Hindi ==> 60 
Telugu ==> 10 

paste實用照顧打開多個文件,並閱讀他們一行行,在同步的。

要轉換的原始文件,使用這樣的:在一個從兩個文件中讀取行while循環]的

$ printf '%s\n' $(cat subject) 
English 
Hindi 
Telugu 
+0

或者只是'tr'''\ n' tripleee