몇 가지 조작이 필요한 대용량 데이터베이스 파일이 있습니다. 본질적으로 나는 '|'로 구분 된 중복 된 필드 하나를 피할 필요가있다. 를 위해 :awk - 중복 행의 첫번째 줄과 그 아래의 행만 인쇄하십시오.
-- TITLE1 | TITLE2 |T3 |TITLE4|TITLE5
----------|----------|-----|------|---------------
--
DATA1 | SAME | | | blah blah
ELIGIBLE | x1
DATA1 | SAME | | blah | blah
ELIGIBLE | x2
DATA1 | SAME | | blah | blah blah
ELIGIBLE | x2
DATA2 | SAME | | | blah blah
ELIGIBLE | y1
DATA2 | SAME | | blah | blah
ELIGIBLE | y2
DATA2 | SAME | | blah | blah blah blah blah
ELIGIBLE | y2
DATA3 | SAME | | | blah blah
ELIGIBLE | z1
DATA3 | SAME | | blah | blah
ELIGIBLE | z2
DATA3 | SAME | | blah | blah blah blah blah
ELIGIBLE | z2
내가 사용하고있는 코드는
BEGIN{ FS = "|" }
{
count[$1]++;
if (count[$1] == 1)
first [$1] = $0;
if (count[$1] > 1)
print first[$1]
NR==1;
}
입니다 그러나 그것은 나에게 출력을 제공합니다
-- TITLE1 | TITLE2 |T3 |TITLE4|TITLE5
----------|----------|-----|------|---------------
--
DATA1 | SAME | | | blah blah
ELIGIBLE | x1
DATA2 | SAME | | | blah blah
ELIGIBLE | y1
DATA3 | SAME | | | blah blah
ELIGIBLE | z1
:이 같은 출력을 선호
-- TITLE1 | TITLE2 |T3 |TITLE4|TITLE5
----------|----------|-----|------|---------------
--
DATA1 | SAME | | | blah blah
ELIGIBLE | x1
DATA2 | SAME | | | blah blah
DATA3 | SAME | | | blah blah
을
제목 블록은별로 신경 쓰지 않지만 n 설명 된대로 데이터를 표시합니다. 아마추어 설명 미안하지만 솔루션에 대한 도움을 주시면 감사하겠습니다. 저는 리눅스 커맨드 라인 스크립팅에 관해서는 초보자입니다. 그래서 어떤 사람이 내 대답이 틀린 이유를 설명 할 수 있다면, 나는 많이 감사 할 것입니다. awk에 국한되지 않고 모든 명령 솔루션을 사용할 수 있습니다. 난 그냥 awk로 솔루션을 시도 싶었어요.
그래서 당신이 나머지를 주어진 TITLE1와 데이터의 첫 번째 라인을 유지하고 버리고 싶은, 서로 다른 TITLE5의 등을하는 경우에도? –
올바른지, 그 아래에 적합한 라인을 유지하십시오. –