寻找可以从 2 个文件插入输入的 bash 脚本

寻找可以从 2 个文件插入输入的 bash 脚本

我有 2 个包含不同数据的文件。如何将数据放入这些文件中并打印?我正在尝试 for 循环,但它只适用于 1 个变量。

文件A
https://xyx.com/test-posts/
https://www.abc.com/temp-article/

文件B
xyx.com
abc.com

我想实现如下所示的目标

样本

<a href="https://xyx.com/test-posts/">xyx.com</a>
<a href="https://www.abc.com/temp-article/">abc.com</a>

提前致谢!

答案1

怎么样

$ paste FileA FileB | awk '{print "<a href=\"" $1 "\">" $2 "</a>"}'
<a href="https://xyx.com/test-posts/">xyx.com</a>
<a href="https://www.abc.com/temp-article/">abc.com</a>

注意:如果您的文件条目可能包含空格,您需要做一些更复杂的事情(例如,为paste和选择不同的分隔符awk) - 我认为这里不是这种情况,因为它们是 URL

答案2

$ while read -r url && read -r domain <&3; do printf '<a href="%s">%s</a>\n' "$url" "$domain"; done <FileA 3<FileB
<a href="https://xyx.com/test-posts/">xyx.com</a>
<a href="https://www.abc.com/temp-article/">abc.com</a>

或者,正如您在脚本中编写的那样:

while read -r url && read -r domain <&3; do
    printf '<a href="%s">%s</a>\n' "$url" "$domain"
done <FileA 3<FileB

这是一个while循环,直到两个read调用中的任何一个都无法读取完整的行为止。第一个read读取 URL FileA,第二个read读取域FileB(通过文件描述符 3)。

输出由printf将读取的数据插入格式化字符串的调用来处理。

答案3

我能够使用以下脚本完成此任务:

#!/bin/sh

filea=/path/to/filea
fileb=/path/to/fileb

lines=$(grep -c . "$filea")

for ((i=1; i<=lines; i++)); do
    url=$(sed -n "${i}p" "$filea")
    name=$(sed -n "${i}p" "$fileb")
    printf "<a href=\"${url}\">${name}</a>\n"
done

lines将被设置为总行数filea

然后,我们从 1 行循环到 n 行,并使用filea和从每行中提取该行。然后使用提取的数据打印所需的语句。filebsedhref

相关内容