这是一种方法sed
:
sed ':a;${s/\n//g;s/^/sed \o47/;s/$/d\o47 documents.txt/;b};s/$/d\;/;N;ba' lines.txt | sh
它用于sed
构建sed
命令并将其通过管道传输到要执行的 shell。生成的sed
命令看起来就像 `sed '3d;5d;11d'documents.txt。
为了构建它,外部sed
命令d;
在每个数字后添加一个,循环到下一行,分支回到开头 ( N; ba
)。当到达最后一行 ( $
) 时,所有换行符都被删除,sed '
被添加到最后一行,d
并且' documents.txt
被添加。然后从-循环b
分支到最后,因为没有指定标签。:a
ba
以下是使用join
and的方法cat -n
(假设 lines.txt 已排序):
join -t $'\v' -v 2 -o 2.2 lines.txt <(cat -n documents.txt | sed 's/^ *//;s/\t/\v/')
如果lines.txt 没有排序:
join -t $'\v' -v 2 -o 2.2 <(sort lines.txt) <(cat -n documents.txt | sed '^s/ *//;s/\t/\v/')
编辑:
修复了join
原始版本仅输出documents.txt中每行的第一个单词的命令中的错误。