我在一个文件中有一个文本
测验
Worker(Thomas) works in ..........
Worker(Alfred) works in ..........
Worker(Albert) works in ..........
回答
Worker(Thomas) works for company(google)
Worker(Alfred) works for company(apple)
Worker(Albert) works for company(Microsoft)
我希望使用基于 sed 的文本搜索、匹配和替换来用“答案”中给出的信息替换“测验”中的空虚线。
答案1
我建议使用awk
来完成这项任务。假设您有两个单独的文件Quiz
并且Answer
位于同一目录中,cd
请进入该目录并在终端中运行以下命令:
awk 'NR==FNR{a[$1]=$4; next}{$4=a[$1]; print}' > Answered_Quiz Answer Quiz
Answered_Quiz
将在同一目录中创建一个名为的新文件,该文件将包含所需的结果。
如果所有行都在一个文件中,您可以先将其拆分:
运行以下命令并替换FileName
您的文本文件名:
awk '$4 ~ /(^[\.]+$)/' > Quiz FileName
制作测验文件。
然后运行以下命令替换FileName
您的文本文件名:
awk '$4 !~ /(^[\.]+$)/' > Answer FileName
获取答案文件。您的原始文件不会受到影响
或者,如果所有行都在一个文件中,并且您不想拆分文件,请在同一Enter目录中使用脚本文件中的以下代码(或者您可以将其复制并粘贴到终端中,然后按 ):
#!/bin/bash
pat1="(^[\.]+$)"
while read f1 f2 f3 f4 f5
do
if [[ "$f4" =~ $pat1 ]]
then
# change Quiz in the following line with your source file name
a4=$(awk -v ff1="$f1" '$4 !~ /(^[\.]+$)/ && $1 == ff1 {print $4}' "Quiz")
echo "$f1 $f2 $f3 $a4" >> "Answered_Quiz"
fi
# change Quiz in the following line with your source file name
done < "Quiz"
将在同一目录中创建一个名为 Answered_Quiz 的新文件,它将包含所需的结果。
祝你好运