麻烦'如果'脚本

时间:2017-01-07 20:25:31

标签: linux shell if-statement while-loop sh

我有一个包含许多不同列的列表文件,并且想知道第三列中的下一个值是否等于第三列上的当前值。我的问题是,这些值是目录,如下所示:

/media/user/DATA/Folder1/File1.extension
/media/user/DATA/Folder1/File1.extension
/media/user/DATA/Folder1/File2.extension
/media/user/DATA/Folder1/File2.extension
/media/user/DATA/Folder2/File3.extension
/media/user/DATA/Folder2/File4.extension
/media/user/DATA/Folder2/File5.extension
/media/user/DATA/Folder3/File6.extension
/media/user/DATA/Folder4/File6.extension

我在同一个文件夹中有相同名称的文件(应该被视为相等的值),不同文件夹中的相同名称(必须被识别为不同的值)和相同的文件夹但名称不同(不同的值)。

我试图做的是对它们进行排序(使用sort -k 3,3),然后制作第四列,说明下一个值是否与列中的值相同,看起来像这样:

/media/user/DATA/Folder1/File1.extension Y
/media/user/DATA/Folder1/File1.extension N
/media/user/DATA/Folder1/File2.extension Y
/media/user/DATA/Folder1/File2.extension N
/media/user/DATA/Folder2/File3.extension N
/media/user/DATA/Folder2/File4.extension N
/media/user/DATA/Folder2/File5.extension N
/media/user/DATA/Folder3/File6.extension N
/media/user/DATA/Folder4/File6.extension N

我想出了这个代码来做到这一点,但是在将R1与LastR1进行比较时它会一直显示错误,我认为这可能是由于" /"在字符串......

echo "N" > LastR1.kp
sort -k3,3 list > list.tmp
mv list list.backup
mv list.tmp list

while read T1 T2 R1; do
    LastR1=`cat LastR1.kp`
    if [ $R1 == $LastR1 ]
    then
        KeepR1="Y"
    else
        KeepR1="N"
    fi
    echo "$KeepR1" > CKeep.kp
    cat KeepList.kp CKeep.kp > KeepList.kp
done
sed -i -e 1,2d KeepList
join list KeepList > list.tmp
mv list.tmp list

所以,我最后会得到的是我的原始文件,第四列带有Y(对于'下一行在第3列中具有相同的值)或N(对于'下一行的不同值')。 我似乎找不到我的if语句不起作用的原因 - 尽管我认为这种方法可以做我需要的,但我肯定对不同的方法持开放态度

1 个答案:

答案 0 :(得分:0)

不确定您使用的是bash还是sh。在脚本顶部添加shebang行:

#!/usr/bin/env bash

并将if条件更改为使用[[ ]]

if [[ $R1 == $LastR1 ]]

我希望这可以解决你的问题。