【发布时间】:2013-08-27 13:55:52
【问题描述】:
我的 Linux 系统上有一个目录,其内容是成对的文件名,如下所示:
File1a
File1b
File2a
File2b
File3a
File3b
我想对 File1a 和 File1b 的内容进行比较,并将结果存储在单独的文件中。类似地,对遍历整个列表的其他对执行此操作。这可以通过 shell 脚本实现吗?
【问题讨论】:
我的 Linux 系统上有一个目录,其内容是成对的文件名,如下所示:
File1a
File1b
File2a
File2b
File3a
File3b
我想对 File1a 和 File1b 的内容进行比较,并将结果存储在单独的文件中。类似地,对遍历整个列表的其他对执行此操作。这可以通过 shell 脚本实现吗?
【问题讨论】:
for x in 1 2 3
do
diff File${x}a File${x}b > File${x}diff
done
这会将每个差异放入自己的文件中(例如File1diff)。如果你想把所有的差异放到一个文件中,你可以这样做:
for x in 1 2 3
do
echo "***** Diff of File${x}a <> File${x}b:" >> DiffOutput
diff File${x}a File${x}b >> DiffOutput
done
【讨论】:
如果您真的需要依赖文件中的内容,因为您的文件名与您发布的简单模式不匹配(并且您的文件名不包含空格),您可以执行以下操作:
xargs -L2 echo < file.txt | while read first second; do
diff "${first}" "${second}" > "${first}_${second}.diff"
done
否则选择@devnull 或@mbratch 的解决方案。
【讨论】:
假设文件名的格式为File\d*{a,b}:
for i in File*a; do
diff ${i} ${i%a}b > ${i%a}.diff
done
对于一对File1a 和File1b,差异将被重定向到File1.diff。
【讨论】: