유 니 크 는 지정 한 열 에 따라 작업 하고 cat, sort 와 결합 하여 comm 가 지정 한 열 에 따라 비교 하 는 기능 을 실현 합 니 다.

3147 단어 linuxshell
열 에 따라 일 하 다
어제 문 제 를 해 결 했 습 니 다. 유 니 크 는 어떻게 지 정 된 열 에 따라 일 합 니까?
유 니 크 도움말 문서 에 이런 설명 이 있 습 니 다.


즉, 유 니 크 - f1 fileName 은 첫 번 째 열 을 건 너 뛰 고 뒤의 열 에 따라 유 니 크 를 진행 하 는 기능 을 나타 낸다.하지만 유 닉 에는 field 가 없습니다.sperator, 즉 구분자 가 지정 되 지 않 았 습 니 다. 시험 을 통 해 빈 칸 과\t 는 기본적으로 식별 할 수 있 는 구분자 입 니 다.
그러면 한 파일 에 5 열 이 있다 면 세 번 째 열 에 따라 유 니 크 처 리 를 하고 싶 습 니 다. awk 로 순 서 를 조정 하고 정렬 하면 됩 니 다.그리고 uniq - f4 fileName; -f4 는 앞의 4 열 을 뛰 어 넘 었 음 을 나타 낸다.
그 중 2, 3 열 을 통 해 유 니 크 작업 을 진행 합 니 다. 작업 과 마찬가지 로 2, 3 열 을 맨 뒤로 옮 기 고 앞 열 을 뛰 어 넘 으 면 됩 니 다.
2. 유 닉 의 기타 상용 옵션
나 에 게 는 중 복 된 줄 을 찾 거나 중 복 된 줄 을 없 애 는 것 이 빈번 하 다.몇 개의 상용 명령 기록 은 다음 과 같다.
-f, --skip-fields=N
              avoid comparing the first N fields
<span style="white-space:pre">	</span>-c, --count
              prefix lines by the number of occurrences    #记录重复的行数

       -d, --repeated
              only print duplicate lines<span style="white-space:pre">			</span>#打印重复了的行,即多余一行的数据行

       -D, --all-repeated[=delimit-method]
              print all duplicate lines delimit-method={none(default),prepend,separate} Delimiting is done with blank lines<span style="white-space:pre">	</span>#将重复的行不合并的输出。当你按照最后一列uniq的时候,并不代表其他列不一样。这个操作也很有用

나 에 게 있어 서 위의 것 은 이미 충분 하 다.
3. cat, sort, uniq, 복합 사용 열 에 따라 작 동 하 는 comm 기능 구현
셸 에는 자바 위의 HashMap 을 실현 할 수 있 는 기능 이 있 을 것 같 지만 아직 배우 지 못 했 습 니 다.comm 는 설명 을 보고 인터넷 에서 검색 해 보 았 지만 열 에 따라 두 파일 을 비교 하 는 기능 을 발견 하지 못 했 습 니 다. 있 으 면 원만 합 니 다.
두 파일 record < Name, Record >, failed < name > 두 파일 모두 크 고 3000 + 줄 입 니 다. 이 럴 때 record 에 있 는 Name 과 failed 에 있 는 Name 의 차 이 를 찾 아야 합 니 다.물론 cut 로 record 의 Name 을 꺼 내 는 것 은 가능 하지만, 나 는 그 에 상응하는 Record 가 필요 하 다. 그것 은 grep 를 통과 할 수 밖 에 없다.실천 은 효율 이 너무 낮 아 참 을 수 없다 는 것 을 증명 한다.
유 니 크 의 열 에 따라 일 하 는 방법 을 해결 한 후에 이 문제 도 해결 방향 이 생 겼 다.
<span style="white-space:pre">	</span>-u, --unique
              only print unique lines<span style="white-space:pre">			</span>#输出唯一的没有重复的
<span style="font-size:14px;">1. 使用awk将failed<Name>,改造为failed<Name,-1></span>
<span style="font-size:14px;">2. 使用cat将failed<Name,-1>,record<Name,Record>连接为一个文件Mixed<Name,Record></span>
<span style="font-size:14px;">3. 使用sort将Mixed<Name,Record>按照<Name>排序</span>

이 방법 은 적어도 효율 적 으로 자신의 작은 수 요 를 만족 시 킬 수 있다.
4. sort 열 에 따라 작업
이것 은 이전에 블 로그 에서 언급 한 적 이 있 지만 정확 하지 않 은 부분 이 있다.아직 확실 하 지 는 않 지만 분명 한 것 은 sort - k2, 2 fileName 은 두 번 째 열 에 따라 정렬 되 어 있 을 것 입 니 다.sort - k2, 2 - k4nr, 4 fileName 이렇게 하면 현재 제 업무 수 요 를 만족 시 킬 수 있 습 니 다.
5. 행 에 따라 열 거 된 작업
1. 하나의 명령 이 데이터 열 을 처리 하 는 것 이 라면 지정 한 열 을 처리 할 수 있어 야 합 니 다.예 를 들 어 comm, sort, cut, uniq 는 comm 에 대해 자신 이 이해 하지 못 할 수도 있 습 니 다.
2. 줄 처리, grep, sed, awk 의 작업 은 이미 수 요 를 만족 시 킬 수 있 습 니 다.

좋은 웹페이지 즐겨찾기