텍스트 파일에서 특정 줄을 삭제하는 방법은 무엇입니까?

텍스트 파일에서 특정 줄을 삭제하는 방법은 무엇입니까?

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[]두 번째 파일에서 인쇄하면 됩니다 .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

관련 정보