我對Bash腳本編程非常陌生。我正在嘗試編寫一個適用於兩個文件的腳本。該文件的每一行看起來是這樣的:從文件讀取的Bash腳本具有亂碼輸出
INST <_variablename_> = <_value_>;
的兩個文件有很多變數,但他們都以不同的順序,所以我不能只是diff的他們。我想要做的是通過文件並找到所有具有不同值的變量,或者找到一個文件中指定的變量,而不是另一個文件中指定的所有變量。
這是我的腳本到目前爲止。再說一遍,我對Bash很陌生,所以請對我輕鬆一下,但也可以隨時提出改進建議(我很感激它)。
#!/bin/bash
line_no=1
while read LINE
do
search_var=`echo $LINE | awk '{print $2}'`
result_line=`grep -w $search_var file2`
if [ $? -eq 1 ]
then
echo "$line_no: not found [ $search_var ]"
else
value=`echo $LINE | awk '{print $4}'`
result_value=`echo $result_line | awk '{print $4}'`
if [ "$value" != "$result_value" ]
then
echo "$line_no: mismatch [ $search_var , $value , $result_value ]"
fi
fi
line_no=`expr $line_no + 1`
done < file1
現在,這裏的是我得到的一些輸出的例子:
111: mismatch [ TXAREFBIASSEL , TRUE; , "TRUE"; ]
, 4'b1100; ] [ TXTERMTRIM , 4'b1100;
113: not found [ VREFBIASMODE ]
, 2'b00; ]ch [ CYCLE_LIMIT_SEL , 2'b00;
, 3'b100; ]h [ FDET_LCK_CAL , 3'b101;
第一行是什麼,我會期待(我會稍後再處理引號)。在第二行,第四行和第五行,看起來最終的值是覆蓋「line_no:mismatch」部分。此外,在第二行和第四行,值相匹配 - 它不應該打印任何東西!
我問了我的朋友這件事,他的建議是「用Perl做的」。所以我現在正在學習Perl,但我仍然想知道發生了什麼以及爲什麼會發生這種情況。
謝謝!
編輯:
嘆息。我解決了這個問題。其中一個文件有Unix換行符,另一個有DOS換行符。我其實認爲這可能是這種情況,但我也認爲如果vi打開一個dos結尾的文件,vi應該顯示一些字符。由於他們看起來一樣,我認爲他們是一樣的。
感謝您的幫助和建議!
閱讀'comm'工具。祝你好運。 – shellter 2012-02-26 21:48:26