이 질문은 질문의 연속입니다예전에 물어봤는데
샘플 데이터 파일:
empid;A1001
empname;ABC
salary;3000
dept;ABC
age;24
dept;112
JOD;20170101
empid;#201
empid;A2001
salary;5000
dept;XYZ
age;27
JOD;20170303
age;92
empid; #3300
empid;A1002
empname;MAN
salary;11000
dept;SCI
age;30
dept;Geology
JOD;20180607
empid; #XY123
empid;A1005
empname;NAME
salary;10200d
dept;XYZ
JOD;20161212
empid를 무시 #
하거나 첫 번째 문자로 empid인 항목만 일치시키고 A
속성 세트에서 각 속성이 처음 나타나는 항목만 일치시켜야 합니다: empid
, empname
, salary
, dept
, age
, JOD
.
따라서 출력은 다음 출력 파일과 유사해야 합니다.
empid;A1001
empname;ABC
salary;3000
dept;ABC
age;24
JOD;20170101
empid;A2001
salary;5000
dept;XYZ
age;27
JOD;20170303
empid;A1002
empname;MAN
salary;11000
dept;SCI
age;30
JOD;20180607
empid;A1005
empname;NAME
salary;10200
dept;XYZ
JOD;20161212
절차를 안내해 주시고 추가 정보가 필요한 경우 알려주시기 바랍니다.
답변1
각 직원 기록이 행으로 시작한다고 가정하면 empid
"잘못된" 행을 완전히 무시(예: 인쇄하지 않거나 "기록 시작"으로 표시하지 않음)하여 empid
이전 질문에 대한 답변을 간단히 수정할 수 있습니다.
awk -F';' '$1=="empid"{if ($2!~/^A/) next; delete a} !a[$1]++' input.txt > output.txt
empid
"값" 필드가 있는 모든 행은 무시됩니다.아니요해당 행이 발견되면 A
먼저 명령을 실행하십시오.next
이 외에도 배열을 사용하여 현재 레코드에서 주어진 속성 이름이 얼마나 자주 발견되었는지 저장하고 해당 레코드에서 이미 발생한 속성을 건너뜁니다. 행이 발생하면 empid
새 레코드에 대한 배열이 재설정됩니다(정의에 따라 "유효한" ID가 포함되어 있는 경우).
마찬가지로 선언을 awk
구현하지 않는 delete a
버전에서는모두배열 변수, 이 명령은 다음으로 바꿔야 합니다.
split("",a)
어레이를 재설정합니다.