2013-11-27 13 views
-1

這已經得到解決,但它是如何工作的如何迭代4個變量並比較其中的2個may行?

LOGICAL UNIT NUMBER 150 
UID:      60:06:01:60:10:20:2E:150 
LOGICAL UNIT NUMBER 201 
UID:      60:06:01:60:BB:20:2E:201 
LOGICAL UNIT NUMBER 30 
UID:       60:06:01:60:BB:10:2E:30 
LOGICAL UNIT NUMBER 50 
UID:       60:06:01:60:BB:10:2E:50 
LOGICAL UNIT NUMBER 1500 
UID:      60:06:01:60:BB:10:2E:1500 
LOGICAL UNIT NUMBER 100 
UID:       60:06:01:60:BB:10:2E:100 
LOGICAL UNIT NUMBER 1100 
UID:       60:06:01:60:BB:10:2E:100 
LOGICAL UNIT NUMBER 1600 
UID:       60:06:01:60:BB:10:2E:100 

我有以下腳本,它工作正常如果我的文件(文本和文本2)就像下面的格式,但對於一些事情,只有在(i和y)中只有相同的值之間不等於所有值之間相等,所以我需要一些東西來比較所有(i變量與所有y變量),然後打印輸出文件。

exec 5< <(awk '{IGNORECASE=1}/UID/ {print $4}' TEXT) 
exec 6< <(awk '{IGNORECASE=1}/LOGICAL/ {print $6}' TEXT) 
exec 7< <(awk '{IGNORECASE=1}/UID/ {print $4}' TEXT2) 
exec 8< <(awk '{IGNORECASE=1}/LOGICAL/ {print $6}' TEXT2) 
while read i <&5 && read x <&6 && read y <&7 && read z <&8 
do 
if [ "$i" == "$y" ] 
then 
echo " naviseccli -h 10.1.xx.xx -user admin -password xxxx -scope 0 sancopy -  create -incremental -name copy_LUN_$i -srcwwn $x -destwwn $z -verify -linkbw 1024" >> INSHALLAH_KELSET 
else 
echo " no devices found " 
fi 
done 

===================

我已經作出bash -x INSHALLAH和輸出

$ bash -x INSHALLAH 
+ exec 
++ awk '{IGNORECASE=1}/UID/ {print $4}' TEXT 
+ exec 
++ awk '{IGNORECASE=1}/LOGICAL/ {print $6}' TEXT 
+ exec 
+ exec 
++ awk '{IGNORECASE=1}/UID/ {print $4}' TEXT2 
++ awk '{IGNORECASE=1}/LOGICAL/ {print $6}' TEXT2 
+ read i 
+ read x 
+ read y 
+ read z 
+ '[' 50 == 50 ']' 
+ echo ' naviseccli -h 10.1.xx.xx -user admin -password xxxxxx -scope 0 sancopy -create -incremental -name copy_LUN_50 -srcwwn 60:06:01:60:10:20:2E:00:24:DF:C9:2C:F4:AC:E2:11 -destwwn 60:06:01:60:BB:10:2E:00:96:6D:0E:82:B4:09:E3:13 -verify -linkbw 1024' 
+ read i 
+ read x 
+ read y 
+ read z 
+ '[' 201 == 201 ']' 
+ echo ' naviseccli -h 10.1.xx.xx -user admin -password xxxxx -scope 0 sancopy -create -incremental -name copy_LUN_201 -srcwwn 60:06:01:60:10:20:2E:00:08:A5:91:23:FF:AF:E2:11 -destwwn 60:06:01:60:10:20:2E:00:08:A5:91:23:FF:AF:E2:11 -verify -linkbw 1024' 
+ read i 
+ read x 
+ read y 
+ read z 
+ '[' 300 == 30 ']' 
+ echo ' no devices found ' 
no devices found 
+ read i 
+ read x 
+ read y 
+ read z 
+ '[' 150 == 1500 ']' 
+ echo ' no devices found ' 
no devices found 
+ read i 
+ read x 
+ read y 
+ read z 
+ '[' 1500 == 100 ']' 
+ echo ' no devices found ' 
no devices found 
+ read i 

下面這是我的2個文件相同下面

TEXT

LOGICAL UNIT NUMBER 50 
UID:      60:06:01:60:BB:10:2E:00:96:6D:0E:82:B4:09:E3:13 
LOGICAL UNIT NUMBER 201 
UID:      60:06:01:60:10:20:2E:00:08:A5:91:23:FF:AF:E2:11 
LOGICAL UNIT NUMBER 30 
UID:      60:06:01:60:10:20:2E:00:BA:FF:3B:5A:2C:9A:E2:11 
LOGICAL UNIT NUMBER 1500 
UID:      60:06:01:60:BB:10:2E:00:96:6D:0E:82:B4:09:E3:11 
LOGICAL UNIT NUMBER 100 
UID:      60:06:01:60:BB:10:2E:00:96:6D:0E:82:B4:09:E3:14 
LOGICAL UNIT NUMBER 150 
UID:      60:06:01:60:BB:10:2E:00:96:6D:0E:82:B4:09:E3:13 

TEXT2

LOGICAL UNIT NUMBER 50 
UID:      60:06:01:60:10:20:2E:00:24:DF:C9:2C:F4:AC:E2:11 
LOGICAL UNIT NUMBER 201 
UID:      60:06:01:60:10:20:2E:00:08:A5:91:23:FF:AF:E2:11 
LOGICAL UNIT NUMBER 300 
UID:      60:06:01:60:10:20:2E:00:BA:FF:3B:5A:2C:9A:E2:11 
LOGICAL UNIT NUMBER 150 
UID:      60:06:01:60:BB:10:2E:00:96:6D:0E:82:B4:09:E3:11 
LOGICAL UNIT NUMBER 1500 
UID:      60:06:01:60:BB:10:2E:00:96:6D:0E:82:B4:09:E3:13 

我必須爲1000個設備創建約1000個會話,並且無法創建手動。

回答

1

從你的問題,我不明白其他文件如何與i和y值相關。以下是將file1的所有值與file2進行比較的簡化版本。

while read i<&5; 
do 
    while read y<&7; 
     do echo $i,$y; 
    done 7< <(awk '{print}' t2.txt) ; 
done 5< <(awk '{print}' t1.txt) 

這可以幫助你:

while read i && read j; 
do 
    while read y && read z; 
    do 
     if [ "$i" == "$y" ] 
     then 
       echo " naviseccli -h 10.1.xx.xx -user admin -password xxxx -scope 0 sancopy -  create -incr 
emental -name copy_LUN_$i -srcwwn $j -destwwn $z -verify -linkbw 1024" >> INSHALLAH_KELSET 
     else 
       echo " no devices found " 
     fi 
    done < <(awk '{IGNORECASE=1; OFS="\n"}/UID/ {print $4, $6}' TEXT2) ; 
done < <(awk '{IGNORECASE=1; OFS="\n"}/UID/ {print $4, $6}' TEXT) 
0

你想要做這兩個步驟。

首先,使用awk來提取你想要的信息。在這種情況下,請使用awk跨輸入行記住變量的事實。以「LOGICAL UNIT NUMBER」開頭的行將變量「lun」設置爲該值。以「UID:」開頭的行將打印lun和wwn。

然後使用「加入」投其所好2檔(它們是匹配了使用第一列)和輸出命令:

# Extract the data into "LUN WWN" files, sorted. 
awk '/^LOGICAL UNIT NUMBER/ { lun = $4 } /^UID:/ { print lun " " $2 }' <text1.txt | sort -n >items1.txt 
awk '/^LOGICAL UNIT NUMBER/ { lun = $4 } /^UID:/ { print lun " " $2 }' <text2.txt | sort -n >items2.txt 
# Use join to match up the LUNs of each file (LUN SRCWWN DSTWWN) then use awk to write out the commands: 
join items1.txt items2.txt | awk '{ print "naviseccli -h 10.1.xx.xx -user admin -password xxxx -scope 0 sancopy -create -incremental -name copy_LUN_" $1 " -srcwwn " $2 " -destwwn " $3 " -verify -linkbw 1024" }' 

如果你把這個在bash腳本,你可以採取單引號可以包含多行文字的優勢。這將使其更易於閱讀:

# Extract the data into "LUN WWN" files, sorted. 
awk ' 
    /^LOGICAL UNIT NUMBER/ { lun = $4 } 
    /^UID:/    { print lun " " $2 } 
    ' <text1.txt | sort -n >items1.txt 
awk ' 
    /^LOGICAL UNIT NUMBER/ { lun = $4 } 
    /^UID:/    { print lun " " $2 } 
    ' <text2.txt | sort -n >items2.txt 
# Use join to match up the LUNs of each file (LUN SRCWWN DSTWWN) then use awk to write out the commands: 
join items1.txt items2.txt | \ 
    awk '{ print "naviseccli -h 10.1.xx.xx -user admin -password xxxx -scope 0 sancopy -create -incremental -name copy_LUN_" $1 " -srcwwn " $2 " -destwwn " $3 " -verify -linkbw 1024" }' 

輸出:

naviseccli -h 10.1.xx.xx -user admin -password xxxx -scope 0 sancopy -create -incremental -name copy_LUN_50 -srcwwn 60:06:01:60:BB:10:2E:00:96:6D:0E:82:B4:09:E3:13 -destwwn 60:06:01:60:10:20:2E:00:24:DF:C9:2C:F4:AC:E2:11 -verify -linkbw 1024 
naviseccli -h 10.1.xx.xx -user admin -password xxxx -scope 0 sancopy -create -incremental -name copy_LUN_201 -srcwwn 60:06:01:60:10:20:2E:00:08:A5:91:23:FF:AF:E2:11 -destwwn 60:06:01:60:10:20:2E:00:08:A5:91:23:FF:AF:E2:11 -verify -linkbw 1024