coreutils 매뉴얼에서 배웠습니다.join
-e string
입력에서 누락된 출력 필드를 문자열로 바꿉니다. 즉, -12jo 옵션으로 지정된 필드가 누락되었습니다.
나는 이 옵션을 전혀 이해하지 못한다. 다음은 무엇을 의미합니까?
"입력에서 출력 필드가 누락되었습니다"
"-12jo 옵션으로 지정된 필드가 누락되었습니다"?
감사해요.
답변1
약간 비밀스러운 문자열은 , , 및 -12jo
4개의 개별 옵션을 나타냅니다 . 그 중 처음 3개는 각 파일에 포함할 필드를 선택하는 것과 관련이 있고 마지막 은 각 파일의 어떤 필드를 출력해야 하는지 선택하는 것과 관련됩니다. 이 옵션은 GNU의 확장이며 (여기서 정수는 어디에 있는가)와 동일 합니다 .-1
-2
-j
-o
-j
join
-j n
-1 n -2 n
n
이 옵션은 요청 가져오기를 사용할 때 -e
적용됩니다 .-a
페어링되지 않은참여하는 하나 또는 두 개의 파일에 있는 줄입니다. 한 파일의 행이 다른 파일의 행과 일치하지 않기 때문에 쌍을 이루지 않은 행은 데이터를 잃게 됩니다. 이 -e
옵션은 이러한 필드를 지정된 문자열로 바꿉니다. 마찬가지로 -o
요청 파일의 특정 줄에 존재하지 않는 필드를 사용하는 경우 -e
null 값을 문자열로 대체할 수 있습니다.
예: 두 개의 파일에는 여러 제품의 제조 비용과 판매 수익이 포함되어 있습니다. 각 파일에는 필드가 있습니다.
- 제품 번호
- 상품명
- 일부 숫자
$ cat expenses.txt
1 teacup 5
2 spoon 7
3 bowl 10
$ cat sales.txt
1 teacup 30
2 spoon 24
수수료를 받기 위해그리고모든 제품의 판매, 문자열(첫 번째 또는 두 번째 파일의)에서 누락될 수 있는 숫자를 바꾸는 동안 NONE
다음을 수행합니다.
$ join -a1 -a2 -o0,1.2,1.3,2.3 -e NONE expenses.txt sales.txt
1 teacup 5 30
2 spoon 7 24
3 bowl 10 NONE
여기서는 이 -a
옵션을 두 번 사용하여 두 파일의 모든 행을 요청합니다(SQL의 "완전 외부 조인"). 이 -o
옵션은 각 파일에서 특정 필드를 가져오는 데 사용되며(필드는 0
기본적으로 각 파일의 첫 번째 필드인 연결된 필드임) -e
누락된 값을 대체하는 데 사용되는 문자열을 지정합니다.NONE
보시다시피 NONE
ID 3의 제품이 두 번째 파일에 언급되지 않았기 때문에 "Sales Value"를 얻습니다.