我在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
请帮助提供解决方案。 非常感谢你。
答案 0 :(得分:0)
我会做这样的事情:
$values = compact("a", "b", "c", "d");
$highest_value = max($values);
$key = array_search($highest_value, $values);
即,
#!/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
程序可以(如评论中所述)通过选择“>”来提供所需的信息来自默认输出的行。