gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:02 32 4
gpt4 key购买 nike

我在 Linux 服务器中有 2 个 diff 目录,其中不断有来自两个 diff 服务器的 .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

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

最佳答案

我会做这样的事情:

#!/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

也就是说,

  • 不要使用“ls”获取文件名列表
  • 只需要一个循环
  • diff 程序可以(如评论中所述)通过从其默认输出中选择“>”行来提供所需的信息。
  • 输出文件名的路径名似乎不正确(我删除了不需要的目录部分)。

关于linux - bash/awk 脚本比较两个不同文件夹中所有文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33866204/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com