awk는 현재와 다음을 비교합니다.

awk는 현재와 다음을 비교합니다.

내 입력 파일은 다음과 같습니다

     puloto_cluster_b_02_sys
puloto_cluster_b_02_sys puloto_cluster_b_generic_cg
        puloto_cluster_b_02_temp
        puloto_cluster_b_04_sys
puloto_cluster_b_04_sys puloto_cluster_b_generic_cg
        puloto_cluster_b_04_temp
        puloto_cluster_b_06_sys
puloto_cluster_b_06_sys puloto_cluster_b_generic_cg
        puloto_cluster_b_08_sys
puloto_cluster_b_08_sys puloto_cluster_b_generic_cg
        puloto_cluster_b_10_sys
puloto_cluster_b_10_sys puloto_cluster_b_generic_cg

내 출력이 다음과 같기를 원합니다.

puloto_cluster_b_02_sys puloto_cluster_b_generic_cg
puloto_cluster_b_02_temp
puloto_cluster_b_04_sys puloto_cluster_b_generic_cg
puloto_cluster_b_04_temp
puloto_cluster_b_06_sys puloto_cluster_b_generic_cg
puloto_cluster_b_08_sys puloto_cluster_b_generic_cg
puloto_cluster_b_10_sys puloto_cluster_b_generic_cg

즉, 현재 레코드($1)를 다음 레코드($1)와 비교하여 다음 레코드만 인쇄합니다. 일치하는 항목이 없으면 현재 항목을 인쇄합니다.

답변1

Awk해결책:

awk '{
         items++;
         if ($1 == f1) { print; items = 0 }
         else if (items == 2) { sub(/^[[:space:]]*/, "", prev); print prev; items-- }
     }
     { prev = $0; f1 = $1 }' file

산출:

puloto_cluster_b_02_sys puloto_cluster_b_generic_cg
puloto_cluster_b_02_temp
puloto_cluster_b_04_sys puloto_cluster_b_generic_cg
puloto_cluster_b_04_temp
puloto_cluster_b_06_sys puloto_cluster_b_generic_cg
puloto_cluster_b_08_sys puloto_cluster_b_generic_cg
puloto_cluster_b_10_sys puloto_cluster_b_generic_cg

답변2

GNU sed도구를 사용하십시오:

sed -Ee '
   $!N
   /^[[:blank:]]*([^[:blank:]]{1,})([[:blank:]]|\n)(.*\n){0,1}\1([[:blank:]]|$)/D
   s/^[[:blank:]]*//;P;D
'  input_file

설명하다:

  • $!N마지막 줄이 아닌 한 다음 줄을 패턴 공간으로 가져옵니다.
  • /^[[:blank:]]*([^[:blank:]]{1,})([[:blank:]]|\n)(.*\n){0,1}\1([[:blank:]]|$)/D

    • 현재 줄의 첫 번째 필드는 다음 줄의 첫 번째 필드와 일치합니다. 그런 다음 첫 번째 줄은 패턴 공간에서 잘리고 잘린 패턴 공간은 sed 스크립트의 맨 위로 돌아가는 데 사용됩니다.
    • OTW에서는 첫 번째 줄을 인쇄한 다음 이를 자르고 sed 스크립트의 맨 위로 다시 분기하고 잘린 패턴 공간에 sed 명령을 적용합니다.

산출:

puloto_cluster_b_02_sys puloto_cluster_b_generic_cg
puloto_cluster_b_02_temp
puloto_cluster_b_04_sys puloto_cluster_b_generic_cg
puloto_cluster_b_04_temp
puloto_cluster_b_06_sys puloto_cluster_b_generic_cg
puloto_cluster_b_08_sys puloto_cluster_b_generic_cg
puloto_cluster_b_10_sys puloto_cluster_b_generic_cg

답변3

또 다른 이상한

awk '{
b=$1
sub("^[[:blank:]]*","")
a=$0
while(getline) {
    if($1!=b)
        print a
    sub("^[[:blank:]]*","")
    a=$0
    b=$1
    }
print a
}' infile

관련 정보