![寻找可以从 2 个文件插入输入的 bash 脚本](https://linux22.com/image/149654/%E5%AF%BB%E6%89%BE%E5%8F%AF%E4%BB%A5%E4%BB%8E%202%20%E4%B8%AA%E6%96%87%E4%BB%B6%E6%8F%92%E5%85%A5%E8%BE%93%E5%85%A5%E7%9A%84%20bash%20%E8%84%9A%E6%9C%AC.png)
我有 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
和从每行中提取该行。然后使用提取的数据打印所需的语句。fileb
sed
href