我在Linux服務器中有兩個diff目錄,其中來自兩個diff服務器的.csv文件不斷出現。兩個目錄中的文件的文件名是相同的。 我想要一個bash/awk腳本,它從兩個文件夾中選取一組相同的文件並讀取它們中的內容。 如果兩個文件中的所有記錄都是相同的,它應該繼續下一組文件,否則如果任何記錄有差異,它應該只將該記錄重定向到另一個文件名稱$ filename_diff。 我的bash和awk的一個新的學習和大量的嘗試後,我才能夠使下面的代碼這是不是運行在所有:(bash/awk腳本比較兩個不同文件夾中的所有文件的內容
#!/bin/bash
for file1 in $(ls -rlt /var/opt/dir1/*.csv | awk '{ print $9 }')
do
for file2 in $(ls -lrt /var/opt/dir2/*.csv |awk '{ print $9 }')
do
if [["$file1" = "$file2"]]
then
awk 'BEGIN {FS==","} NR == FNR{arr[$0];next} ! ($0 in arr)' $file1 $file2 > /var/opt/diff/`echo "$file2"_diff`
else
echo "To NULL" > /dev/null
fi
done
done
提供了一個解決這個請大家幫忙。 非常感謝你提前
在一些地方錯了。在/var/opt/dir1/*.csv中的第一個for循環中使用簡單的glob擴展for file1;做...完成「。如果它們具有相同的基本名稱,則只比較文件,因此根據第一個文件:file2 =/var/opt/dir2/$(basename「$ file1」)來構建第二個文件名。你用'[[''使用'==',而不是'='(''''用'/ bin/[')'來比較兩個字符串。並且你想確保'$ file2'存在:'if [[-e「$ file2」]];'你不用'/ usr/bin/diff'來比較內容嗎? –
你真的想達到什麼目的? (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)如果你想比較兩個目錄的內容,爲什麼'diff --recursive dir1 dir2'不夠? –
嗨Micha,謝謝你的回覆......我不能使用diff,因爲儘管它會顯示不同的文件,但不會告訴哪個特定的記錄在該文件中不同(因爲我在一個文件中有數千條記錄),也是不同記錄的重定向是一個挑戰... 嘿init_js,謝謝你的回覆以及...請讓我檢查和制定你的建議腳本。我會盡快回復您。 – user5419230