这是一种方法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分支到最后,因为没有指定标签。:aba
以下是使用joinand的方法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中每行的第一个单词的命令中的错误。