내 입력 파일은 다음과 같습니다
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