gpt4 book ai didi

linux 将 dwdiff 结果的最后一行重定向到文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:51 24 4
gpt4 key购买 nike

我正在尝试创建一个 sh 来生成一个报告,该报告将显示来自两个文件夹/ja​​va 项目的文件的差异。我正在使用 dwdiff ,我只需要每次比较的最后一行(我不关心差异,百分比就是我需要的)。我创建了以下脚本:

DEST_FOLDER='./target/'
CLASSES_P1='classesP1.txt'
CLASSES_P2='classesP2.txt'
DEST_FILE='report.txt'

rm -r "$DEST_FOLDER"
mkdir -p "$DEST_FOLDER"

rm -f "$DEST_FOLDER/$CLASSES_P1"
rm -f "$DEST_FOLDER/$CLASSES_P2"
rm -f "$DEST_FOLDER/$DEST_FILE"

find ./p1 -name "*.java" >> "$DEST_FOLDER/$CLASSES_P1"
find ./p2 -name "*.java" >> "$DEST_FOLDER/$CLASSES_P2"

while read p; do
while read t; do
dwdiff -s $p $t | tail --lines=0 >> "$DEST_FOLDER/$DEST_FILE"
done < $DEST_FOLDER/$CLASSES_P2

done < $DEST_FOLDER/$CLASSES_P1

它工作正常,但结果没有重定向到给定的文件。该文件已创建,但为空,每个 dwdiff 结果的最后一行显示到控制台。有什么想法吗?

最佳答案

发生了一些事情

  • 您想要的输出是stderr,而不是stdout。您可以在 dwdiff 命令中将它们与 2>&1 合并
  • 您想要的输出实际上似乎首先由 dwdiff 打印,但由于两个不同的输出,您看到的顺序不同。所以你想要 head 而不是 tail
  • 你想要 1 行,而不是 0 行

所以试试 dwdiff -s ... 2>&1 | head --lines=1

 $ dwdiff -s /etc/motd /etc/issue 2>&1 | head --lines=1
old: 67 words 3 4% common 2 2% deleted 62 92% changed

或者,如果您想要 new 行而不是旧行,并且为了简化排序,请尝试丢弃 diff 输出:

 $ dwdiff -s /etc/motd /etc/issue 2>&1 1>/dev/null | tail --lines=1
new: 5 words 3 60% common 0 0% inserted 2 40% changed

请注意,重定向的顺序很重要:首先将 stdout 克隆到 stderr,然后将 stdout 重定向到 /dev/null

关于linux 将 dwdiff 结果的最后一行重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30445159/

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