これを行う方法は次のsed
とおりです。
sed ':a;${s/\n//g;s/^/sed \o47/;s/$/d\o47 documents.txt/;b};s/$/d\;/;N;ba' lines.txt | sh
sed
コマンドを作成し、sed
それを実行するシェルにパイプするために使用します。結果のsed
コマンドは、単に `sed '3d; 5d;11d'documents.txtのようになります。
それを構築するために、外部sed
コマンドはd;
各番号の後にアフターを追加し、次の行にループして、先頭に分岐します(N; ba
)。最後の行()に達する$
と、すべての改行が削除され、sed '
先頭に追加され、最後d
の行' documents.txt
が追加されます。次に、ラベルが指定されていないため、 -ループから最後までb
分岐します。:a
ba
join
およびを使用してこれを行う方法は次の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の各行の最初の単語のみを出力するコマンドのバグを修正しました。