我对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