我在两个文件中有以下数据:
domains.txt
包含:
http://example1.com
urls.txt
包含:
http://example1.com/url-example/
http://example5.com/url-example/
http://example2.com/url-example/
使用以下命令(我使用此结构,因为通常文件中有更多内容,这只是一个最小的例子):
cat domains.txt | while read LINE; do grep -m 1 "$LINE" urls.txt
这将给我匹配的行。
http://example1.com/url-example/
但是,我希望输出为:
http://example1.com,http://example1.com/url-example/
我想添加一个在匹配输出之前添加"LINE"
变量的管道。我在想sed
应该很容易吗?非常感谢您的意见。
更新
尽管使用awk
这很容易,但如果某人有一个管道输出的答案,我想用它来使用脚本。
答案 0 :(得分:2)
while IFS= read -r line; do echo -n "$line,"; grep -m 1 "$line" urls.txt; done < domains.txt
答案 1 :(得分:1)
使用awk很容易做到:
while read LINE; do awk -v pattern="$LINE" '$0 ~ pattern { print pattern "," $0 }' urls.txt; done < domains.txt
或者使用sed:
while read LINE; do sed -ne "s?$LINE.*?$LINE,&?p" urls.txt; done < domains.txt
要回答您的后续问题,请使用awk将结果限制为第一场比赛:
while read LINE; do awk -v pattern="$LINE" '$0 ~ pattern { print pattern "," $0; exit }' urls.txt; done < domains.txt