我有2个文本文件。一个是用户名列表以及他们在同一行工作的公司,但由制表符分隔。第二个是每周生成的报告的输出,其中包含更多信息。
目的是从每周报告中获取名称,并从用户名列表中将其替换为名称和公司。
用户名和公司的列表在UserList.txt文件上看起来像这样,其中用制表符空格分隔。
Name1 Company 1
Name2 Company 2
Name3 Company 3
Name4 Company 4
Name5 Company 5
每周输出文件包含在Weekly.txt文件中
我不知道如何查看第一个文本文件以获取名称和公司名称,并仅替换第二个文本文件中的该部分。
我正在寻找最终的输出看起来像:
到目前为止,我找到了一种使用sed
命令手动执行此操作的方法。这是我到目前为止的内容:
sed -r 's/Name1/Name1 Company 1/g;s/Name2/Name2 Company 2/g;s/Name3/Name3 Company 3/g;s/Name4/Name4 Company 4/g;s/Name5/Name5 Company 5/g'
这是可行的,但它不会读入另一个文件并获取最新信息。请记住,我正在使用cygwin,这都是一个较大的脚本的一部分。
一种解决方案是在用户文件的每一行进行替换。以下脚本将就地编辑Weekly.txt:
prefix="loginName:\s*"
tail -n+2 UserList.txt | while read line; do
name=$(printf "$line" | cut -f1)
company=$(printf "$line" | cut -f2 | tr -d '\n')
sed -i "s/^\($prefix\)$name/\1$name $company/g" Weekly.txt
done
为了提高效率,我们可以收集替换并执行一次sed:
prefix="loginName:\s*"
sedCommand=$(tail -n+2 UserList.txt | while read line; do
name=$(printf "$line" | cut -f1)
company=$(printf "$line" | cut -f2 | tr -d '\n')
printf "s/^\($prefix\)$name/\1$name $company/g;"
done)
sed "$sedCommand" Weekly.txt > new_Weekly.txt
此版本保持Weekly.txt
不变,并将结果写入new_Weekly.txt
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句