cat file_1.txt
100 200 name
100 200
100 200
150 300
150 300
150 250
150 250
150 300 name
final file should be
150 300
150 300
150 250
150 250
이 명령을 사용하고 있습니다
cat file_1.txt | grep -v "name">file_2.txt; cat file_2.txt| while read line;do cat file_1.txt| grep "$line"| head -1|grep -v "name" ;done
하지만 while 루프를 사용하기에는 데이터가 너무 많아서 while 루프를 사용하여 고양이를 만드는 데 시간이 많이 걸립니다. "grep -vf file_1 file_2"
이와 같은 것을 사용하는 것처럼 이 작업을 빠르게 수행할 수 있는 다른 방법이 있습니까 ? 말해주세요.
여기서 내가 사용하는 논리는 패턴의 맨 위 행을 가져와서 패턴이 각 행임을 찾는 것입니다."file_1.txt"
답변1
name
(a) 해당 줄에 포함 되거나 (b) 해당 줄의 처음 두 열이 포함된 이전 줄과 동일하지 않는 한 귀하의 코드는 file_1.txt의 모든 줄을 인쇄하는 것 같습니다 name
. 이 경우 다음을 시도해 보세요.
$ awk '/name/{bad[$1,$2];next} !(($1,$2) in bad)' file_1.txt
150 300
150 300
150 250
150 250
어떻게 작동하나요?
/name/{bad[$1,$2];next}
현재 행에 다음이 포함되어 있으면 처음 두 열의 키 아래
name
연관 배열에 항목을 추가합니다 .bad
그런 다음 나머지 명령을 건너뛰고 다시 시작하기 위해 해당 줄로 이동합니다next
.!(($1,$2) in bad)
현재 행의 처음 두 열
$1,$2
이아니요key 를bad
누른 다음 이 줄을 인쇄하세요.