Bash脚本 - 字符串比较似乎不起作用

时间:2013-03-30 01:06:32

标签: linux bash shell scripting

我的输入文件包含以下格式的内容:

ABCD     XYZAB   1234
PQRSTUV  STU     SKIP
LMN      OPRQM   8966
RSTUV    OPM     SKIP
TUV      ZXU     SKIP

我想解析这个文件并将其输出到一个新文件,使得最后一列为“SKIP”的行不会出现在最终输出文件中,如下所示:

ABCD     XYZAB   1234
LMN      OPRQM   8966

为了处理上述内容,我编写了以下shell脚本:

while read -r col1 col2 col3
do
    if [ "$col3" != "SKIP" ]
    then
    printf "%s %s %s\n" "$col1" "$col2" "$col3";
    fi
done <input.txt > output.txt

但是上面的脚本似乎不起作用,我的输出文件仍然继续包含所有行,在最后一列中有“SKIP”。我不明白为什么“条件”失败了?

谢谢, VJ

2 个答案:

答案 0 :(得分:1)

好吧,虽然脚本是正确的,但正在编辑的输入文件是在Windows环境中。结果,行结尾是“\ r”而不是“\ n”。所以,那里有一个不匹配。因此,条件检查也失败了。一旦我将行结尾转换为UNIX格式,就会根据需要获得输出。感谢大家的帮助。

VJ

答案 1 :(得分:0)

VJ - 我的脚本没有任何问题。我粘贴了你的代码和输入,结果正是你想要的。请参阅我的笔记本电脑“ttt”下面的证据:


[ttt:/m/temp/stack] cat vjvj 

    while read -r col1 col2 col3
    do
        if [ "$col3" != "SKIP" ]
        then
        printf "%s %s %s\n" "$col1" "$col2" "$col3";
        fi
    done  output.txt

[ttt:/m/temp/stack] cat input.txt 
ABCD     XYZAB   1234
PQRSTUV  STU     SKIP
LMN      OPRQM   8966
RSTUV    OPM     SKIP
TUV      ZXU     SKIP
[ttt:/m/temp/stack] cat output.txt
ABCD XYZAB 1234
LMN OPRQM 8966
[ttt:/m/temp/stack] cat /etc/lsb-release

    DISTRIB_ID=LinuxMint
    DISTRIB_RELEASE=13
    DISTRIB_CODENAME=maya
    DISTRIB_DESCRIPTION="Linux Mint 13 Maya"

[ttt:/m/temp/stack]