我在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