テキストファイルから特定の行を削除する方法は?

テキストファイルから特定の行を削除する方法は?

F複数行のテキストを含むテキストファイルと、その行に対応する数値リストをL含む別のテキストファイルがありますが、F リスト内のすべての行をL削除したいと思います。F

次の例では:

cat F.txt
aaa
bbb
ccc

cat L.txt
1
3

1行を削除し、行2を3残してF.txt新しいファイルに保存するコマンドが必要ですF_new.txt

cat F_new.txt
bbb

答え1

awk最初のファイルの行番号をNR==FNR配列としてロードし、その行の配列要素が存在しないp[]2番目のファイルから印刷するだけです。NR!=FNR!p[FNR]

awk 'NR==FNR{p[$1]=$1}
     NR!=FNR&&!p[FNR]' L.txt F.txt > F_New.txt

bbb

答え2

別のオプションは、sedの内容をL.txt一連のコマンドに変換することです。d

printf '%dd\n' $(<L.txt) | sed -f - F.txt > F_New.txt

sed自体を使用して変換を実行することもできます。

sed 's/$/d/' L.txt | sed -f - F.txt > F_New.txt

答え3

cp F.txt F_new.txt
for i in $(sort -nr L.txt)
do
    sed -i "${i}d" F_new.txt
done

関連情報