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