我有一个文字文件,上面写着:
File fileA and fileB differ
File fileX and fileY differ
我需要一个遍历整个文件的bash脚本,每行解析文件名并执行命令diff fileA fileB > fileA.diff
答案 0 :(得分: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
运行它,您将获得所需的信息。
请注意,这对于包含空格的文件名不适用 - 如果你有这种令人发指的野兽,你需要做一些更智能的解析。
答案 1 :(得分:0)
此命令生成diff命令列表:
[me@home]$ 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
来执行生成的命令。
[me@home]$ bash <(sed -n 's/File \(.*\) and \(.*\) differ/diff "\1" "\2" > "\1.diff"/p' infile )