我有一个文本文件F
,其中包含多行文本,另一个文本文件L
包含与中的行相对应的数字列表,F
我想删除中列出的所有L
行F
在下面的例子中:
cat F.txt
aaa
bbb
ccc
cat L.txt
1
3
我需要一个命令来删除行1
和3
,F.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