如何从文本文件中删除特定行?

如何从文本文件中删除特定行?

我有一个文本文件F,其中包含多行文本,另一个文本文件L包含与中的行相对应的数字列表,F 我想删除中列出的所有LF

在下面的例子中:

cat F.txt
aaa
bbb
ccc

cat L.txt
1
3

我需要一个命令来删除行13F.txt只留下第 2 行,并将其保存在新文件中F_new.txt

cat F_new.txt
bbb

答案1

只需awk将第一个文件中的行号加载NR==FNR到数组中p[],然后从第二个文件中打印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

相关内容