我有一个包含许多不同列的列表文件,并且想知道第三列中的下一个值是否等于第三列上的当前值。我的问题是,这些值是目录,如下所示:
/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语句不起作用的原因 - 尽管我认为这种方法可以做我需要的,但我肯定对不同的方法持开放态度
答案 0 :(得分:0)
不确定您使用的是bash
还是sh
。在脚本顶部添加shebang行:
#!/usr/bin/env bash
并将if
条件更改为使用[[ ]]
:
if [[ $R1 == $LastR1 ]]
我希望这可以解决你的问题。