2011-09-20 102 views
0

我有一个行的文本文件中说:diff报告bash脚本

File fileA and fileB differ 
File fileX and fileY differ 

我需要一个bash脚本,在整个文件中去,每行解析文件名并执行该命令diff fileA fileB > fileA.diff

+1

对你很好!为什么它必须是bash脚本?让我们知道您遇到的解决方案的哪一部分,我们将尽力提供帮助。我们不会为你做你的工作。 – Johnsyweb

回答

1

以下命令:

awk '/ differ$/ {print "diff "$2" "$4" >"$2".diff"}{}' 

会给你你可以运行这样做的脚本。

请参见下面的成绩单:

pax$ echo 'File fileA and fileB differ 
hello 
File fileX and fileY differ' | awk ' 
    /differ$/ {print "diff "$2" "$4" >"$2".diff"}{}' 
diff fileA fileB >fileA.diff 
diff fileX fileY >fileX.diff 

捕获输出,然后用bash运行它,你就会有你需要的。

请注意,如果文件名中包含空格,这将无法正常工作 - 如果您拥有这样令人发指的野兽,则需要进行更智能的解析。

+0

谢谢。我现在用这个:read line;做awk'/ differ $/{print“diff”$ 2“”$ 4“>”$ 2“.diff”} {}'; done Michael

0

此命令生成DIFF命令的列表:

[[email protected]]$ sed -n 's/File \(.*\) and \(.*\) differ/diff "\1" "\2" > "\1.diff"/p' infile 
diff "fileA" "fileB" > "fileA.diff" 
diff "fileX" "fileY" > "fileX.diff" 

可以通过使用process substitution它们传递给bash执行生成的命令。

[[email protected]]$ bash <(sed -n 's/File \(.*\) and \(.*\) differ/diff "\1" "\2" > "\1.diff"/p' infile)