什么是使用Bash脚本检查一个文件是否已经被多次追加到另一个文件中的最佳方法?我需要在不安装额外工具的情况下完成此操作。我通过将一个文件追加到另一个文件来定期更新一个文件,并希望确保此操作之前没有发生过。
我尝试了各种diff和wc解决方案,但都找不到解决方案。
我尝试了各种diff和wc解决方案,但都找不到解决方案。
正如mklement0所建议的那样,一种解决方案可能是使用diff
命令来比较目标文件中与源文件相同行数的最后几行。以下是草图:
#!/bin/bash
# USAGE: append_uniq.sh target source
# append source to target only if last part of target != source
target_file=$1
source_file=$2
source_num_lines=$(wc -l < "$source_file")
diff_target_lines=$(tail -n $source_num_lines "$target_file")
if ! diff "$source_file" <(echo "$diff_target_lines") > /dev/null; then
echo "Appending $source_file to $target_file"
cat "$source_file" >> "$target_file"
else
echo "Already appended, skipping"
fi
奖励:一行代码
将文件a
追加到文件lines
中,除非a
已经是最后一个被追加到lines
的文件。两个文件必须存在:
! diff -q a <(tail -n $(wc -l < a) lines) && cat a >> lines
$(wc -l <a)
替换管道$(wc -l a | cut -d' ' -f1)
。 - John1024DIFF=$(diff $1 $2)
if [ -s $1 ] && [ -s $2 ] && [ "$DIFF" != "" ];
then
L1=$(diff $1 $2 | sed -e '1d' -e 's/^..//g' | diff - $2 | sed -e '1d' -e 's/^..//g' | grep -xc "-")
if [[ $L1 -ne 1 ]];
then
echo "在 $1 上的差异比对失败"
exit 1;
fi
fi
- SMC