>

그래서 다음과 같은 줄로 구성된 2 개의 매우 큰 텍스트 파일이 있습니다 :

먼저 :
Robert:Dillain:Other:Other:Other
Julian:Brude:Other:Other:Other
Megan:Flikk:Other:Other:Other
Samantha:Minot:Other:Other:Other
Jesus:Kimmel:Other:Other:Other

둘째 :
Sb:Minot:amsen
Jbb:Kimmel:verlin
R:Dillain:bodent
Mb:Flikk:kentin
Jb:Brude:kemin

두 번째 열(Dillain, Brude 등)을 사용하여 다음과 같이 줄에 붙여넣고 싶습니다.

출력 :
Robert:Dillain:Other:Other:Other:R:Dillain:bodent
Jesus:Kimmel:Other:Other:Other:Jbb:Kimmel:verlin
Samantha:Minot:Other:Other:Other:Sb:Minot:amsen
etc...
etc...

sed 사용을 생각하고있었습니다  이를 위해 유닉스 기반의 모든 것이 좋을 것입니다. 이 작업을 직접 수행 할 방법을 찾지 못했습니다.

  • 답변 # 1

    이것은 join 의 일처럼 들린다 :

    join -t":" -o "1.1,1.2,1.3,1.4,1.5,2.1,2.2,2.3" \
       -j 2 <(sort -k2,2 -t: test1) <(sort -k2,2 -t: test2)
    
    
    출력 :
    Julian:Brude:Other:Other:Other:Jb:Brude:kemin
    Robert:Dillain:Other:Other:Other:R:Dillain:bodent
    Megan:Flikk:Other:Other:Other:Mb:Flikk:kentin
    Jesus:Kimmel:Other:Other:Other:Jbb:Kimmel:verlin
    Samantha:Minot:Other:Other:Other:Sb:Minot:amsen
    
    
    분류 :

    -t  필드 구분 기호를 : 로 설정

    -o  인쇄 형식 설정

    -j  열 번호 2 에 결합

    <(sort -k2,2 -t: file)   -k 에 의해 사전 정렬 파일  두 번째 열 -t  필드 구분 기호를 : 로 설정

  • 답변 # 2

    awk 의 간단한 작업입니다 :

    awk -F':' -vOFS=':' 'NR==FNR{a[$2]=$0;next}{print $0,a[$2]}' file2 file1
    
    

    먼저 우리는 : 를 설정  입력을위한 필드 분리기 ( -F 사용) ) 및 출력 ( OFS 사용) ) 그런 다음 첫 번째 파일이 처리되면 ( file2 ) 우리는 두 번째 필드로 색인 된 테이블 요소에 전체 줄을 할당합니다. 다음 다음 파일 ( file1 ) ) 처리되어 a[$2] 에 저장된 이전 파일의 줄을 추가하여 줄을 인쇄합니다. ).

  • 답변 # 3

    sed 와 함께  당신은 아마 할 수 있습니다 :

    sed 's|[^:]*:\([^:]*\).*|/^[^:]*:\1:/s/$/:&/;t|' file2 | sed -f - file1
    
    

    ... 하나의 sed 가 필요합니다  두 번째 파일을 읽고 sed 를 쓰는 과정  첫 번째를 두 번째 sed 로 편집하기위한 스크립트 stdin. 내가 알 수 있듯이 내용을 그대로 정규 표현식에 직접 주입하는 데 아무런 문제가 없어야합니다. 메타 문자가 입력 될 가능성이있는 경우이 사이트에는 이스케이프 처리 방법에 대한 답변이 많이 있습니다. 그러나 필요한 경우 다음으로 충분합니다.

    sed 's|[]&\./*[]|\\&|g;s|...' ... | sed -f - file1
    
    

    아마도 같은 시위 즈  더 나은 솔루션입니다-이것은 join 에서 어떻게하는지 보여줍니다.  당신이 언급했기 때문에.

    어쨌든, 두 번째 sed 스크립트   sed 에 적용  처럼 보이게합니다 (file2의 모든 줄마다 아래에 비슷한 줄이 있음):

    file1
    
    

    ... 두 번째 콜론으로 구분 된 필드에Dillain과 일치하는 줄이 있으면: R : Dillain : bodent문자열을 추가해야합니다. 꼬리까지. /^[^:]*:Dillain:/s/$/:R:Dillain:bodent/;t 에서 줄을 계속 일치시키는 것이 의미가 없기 때문에 아마도   file1 에서 줄을  이미 추가되었습니다, 후행 file2 est 명령은 완료 되 자마자 성공적인 대체를 중단합니다.

  • 답변 # 4

    python3

    t
    
    

    위 스크립트를 #!/usr/bin/python3 import csv import sys file1, file2 = sys.argv[1], sys.argv[2] with open(file2) as second, open(file1) as first: second_list = second.readlines() first_list = first.readlines() for line1 in first_list: for line2 in second_list: if line1.split(':')[1] == line2.split(':')[1]: print(line1.strip()+line2.strip()) 라는 파일에 복사하여 붙여 넣기 . 그런 다음 터미널에서 아래 명령을 실행하여 스크립트를 실행하십시오.

    script.py
    
    
    python3 script.py file1 file2

  • 이전 awk - 일치하는 열이있는 두 파일 결합
  • 다음 networking - 인터넷에서 클라이언트의 리눅스 박스를 자동으로 찾으려면 어떻게해야합니까?