我有一個包含許多不同列的列表文件,只要第三列中的下一個值等於第三列中的當前值就想知道。我的問題是,這些值是目錄,看起來像這樣:腳本中'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語句不起作用的原因 - 儘管我認爲這種方法可以做我所需要的,但我絕對可以採用不同的方法
「while read」循環的輸入是什麼? – codeforester
你有什麼錯誤? ''''''''裏面的'=='被某些shell支持,但不是全部。 – chepner
輸入是一個列表文件,不同的目錄,忘了把它放在這裏,但它是.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「,謝謝:) –