파일을 읽고 특정 문자열이 처음 나타나는 것을 검색하고 특정 패턴만 일치시킵니다.

파일을 읽고 특정 문자열이 처음 나타나는 것을 검색하고 특정 패턴만 일치시킵니다.

이 질문은 질문의 연속입니다예전에 물어봤는데

샘플 데이터 파일:

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)

어레이를 재설정합니다.

관련 정보