2017-01-07 63 views
0

我有一個包含許多不同列的列表文件,只要第三列中的下一個值等於第三列中的當前值就想知道。我的問題是,這些值是目錄,看起來像這樣:腳本中'if'語句的問題

/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 

我有在同一文件夾相同的名稱(這應該被視爲同等價值),同名不同文件夾中的文件(必須是識別爲不同的值)和相同的文件夾但不同的名稱(不同的值)。

我一直在嘗試做的事情是將它們全部排序(排序爲-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(for '下一行在第三列有相同的值)或N('在下一行不同的值')。 我似乎無法找到爲什麼我的if語句不起作用的原因 - 儘管我認爲這種方法可以做我所需要的,但我絕對可以採用不同的方法

+0

「while read」循環的輸入是什麼? – codeforester

+0

你有什麼錯誤? ''''''''裏面的'=='被某些shell支持,但不是全部。 – chepner

+0

輸入是一個列表文件,不同的目錄,忘了把它放在這裏,但它是.sh文件。我正在用A/A,A/B進行測試。 A/C,B/A爲目錄,並得到此錯誤消息 ./testes.sh:7:[:A/A:意外的操作員 ./testes.sh:7:[:A/B:意外運營商 ./testes.sh:7:[:A/B:意外運營商 ./testes.sh:7:[:A/C:意外運營商 ./testes.sh:7:[:B/A:意想不到的操作員 這就是爲什麼我認爲「/」是問題(讀作「分區」) 管理現在使用「[[]]」和「#!/ usr/bin/env bash「,謝謝:) –

回答

0

不確定您是否使用bashsh。添加家當行腳本的頂部:

#!/usr/bin/env bash 

,改變if條件使用[[ ]]

if [[ $R1 == $LastR1 ]] 

我希望這將解決您的問題。

+0

我使用sh,不知道爲什麼我甚至在那裏添加bash,對不起:s –

+0

這工作,謝謝。如果有人遇到類似的問題,也必須改變我的'join'功能,而不是使用粘貼功能(粘貼file1 file2)。謝謝! –