2013-07-05 50 views
0

我試圖找到一個解決問題的模擬到這一個:線存儲在變量作爲字符串

#command_A 

A_output_Line_1 
A_output_Line_2 
A_output_Line_3 

#command_B 

B_output_Line_1 
B_output_Line_2 

現在我需要比較A_output_Line_2B_output_Line_1和回聲如果相等,則爲「正確」,否則爲「不正確」。

我猜最簡單的方法是複製一行輸出到一些變量中,然後執行這兩個命令後,只需比較變量並回顯一些東西。 這需要在bash腳本中實現,並且如何獲得存儲在變量中的某行輸出的任何信息都可以幫助我將這些部分放在一起。 此外,如果任何人不僅可以告訴我如何複製/存儲一行,而且可能只是一個字或序列,如:第1行,第4-12字節,將其存儲爲字符串中的變量,這將很酷。

我不是一個完整的初學者,但也沒有任何附近的先進的Linux bash用戶。感謝提前的任何幫助,並對壞英語感到抱歉!

+0

一段時間,所以註冊時,就必須有一個問題:'你怎麼知道我們'' – devnull

+0

grep','sed','awk'也許'cut'是爲命令有助於做你想做的事。手冊頁應該有所幫助,幾乎所有的例子都可以在互聯網上共享。:) – David

回答

2

更簡單的方法可能是使用diff,不是嗎?

喜歡的東西:

command_A > command_A.output 
command_B > command_B.output 
diff command_A.output command_B.output 

這會比較多個字符串工作。

但是,既然你想了解單個線(和詞語的線)這裏有一些指針:

# first line of output of command_A 
command_A | head -n 1 

-n 1選項說,只有使用第一行(默認值是10,我認爲)

# second line of output of command_A 
command_A | head -n 2 | tail -n 1 

,將採取的command_A的輸出的前兩行,則最後這兩條線的。快樂的時光:)

可以將此信息現在存儲在一個變量:

export output_A=`command_A | head -n 2 | tail -n 1` 
export output_B=`command_B | head -n 1` 

,然後比較其:

if [ "$output_A" == "$output_B" ]; then echo 'Correct'; else echo 'Not Correct'; fi 

只得到部分字符串,試圖尋找到cut或(更強大的東西)sedawk。另外,只要學習像pythonruby(即使是perl)這樣的好的通用腳本語言,也可以解決這類問題。

+1

可以使用[進程替換](http://www.tldp.org/LDP/abs/html/process-sub.html)進行簡化:'diff <(command_A)<(command_B)'。 –

+0

@AnsgarWiechers酷,不知道 - 我不使用'diff'太多... –

0

使用IFS(內部字段分隔符)在換行符上分隔並將輸出存儲在數組中。

#!/bin/bash 

IFS=' 
' 
array_a=($(./a.sh)) 
array_b=($(./b.sh)) 

if [ "${array_a[1]}" = "${array_b[0]}" ]; then 
    echo "CORRECT" 
else 
    echo "INCORRECT" 
fi 
相關問題