bash / awk脚本比较两个不同文件夹中所有文件的内容

时间:2015-11-23 08:08:51

标签: linux bash shell loops awk

我在Linux服务器中有2个差异目录,其中来自两个差异服务器的.csv文件不断出现。两个目录中文件的文件名相同。 我想要一个bash / awk脚本,它从两个文件夹中选择一组相同的文件并读取它们内部的内容。 如果两个文件中的所有记录都相同,则应继续使用下一组文件,否则如果任何记录存在差异,则应将该记录仅重定向到另一个文件名,例如$ filename_diff。 我是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

请帮助提供解决方案。 非常感谢你。

1 个答案:

答案 0 :(得分:0)

我会做这样的事情:

$values = compact("a", "b", "c", "d");
$highest_value = max($values);
$key = array_search($highest_value, $values);

即,

  • 不要使用“ls”来获取文件名列表
  • 只需要一个循环
  • #!/bin/sh for file1 in /var/opt/dir1/*.csv do name1=$(basename "$file1") file2="/var/opt/dir2/$name1" [ -f "$file2" ] || continue cmp -s "$file1" "$file2" && continue diff "$file1" "$file2" | sed -e '/^[^>]/d' -e 's/^> //' >/var/opt/diff/"${name1}_diff` done 程序可以(如评论中所述)通过选择“>”来提供所需的信息来自默认输出的行。
  • 为输出文件名指定的路径名​​似乎不正确(我删除了不需要的目录部分)。