![두 파일에서 정보를 수집한 다음 이를 다른 파일로 정렬하는 스크립트를 만들어야 합니다. 터미널에서 실행](https://linux55.com/image/12423/%EB%91%90%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%A0%95%EB%B3%B4%EB%A5%BC%20%EC%88%98%EC%A7%91%ED%95%9C%20%EB%8B%A4%EC%9D%8C%20%EC%9D%B4%EB%A5%BC%20%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EC%A0%95%EB%A0%AC%ED%95%98%EB%8A%94%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EB%A7%8C%EB%93%A4%EC%96%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EB%8B%A4.%20%ED%84%B0%EB%AF%B8%EB%84%90%EC%97%90%EC%84%9C%20%EC%8B%A4%ED%96%89.png)
두 개의 파일이 있고 kolokwium1.txt
이름 kolokwium2.txt
과 숫자가 포함되어 있습니다.
콜로크위움1.txt
Kowalski Jan 3
Nowak Adam 5
Malec Ewa 2
콜로크위움2.txt
Malec Ewa 4
Kowalski Jan 2
Nowak Adam 3
에서 파일을 생성 scalenie.sh
하는 스크립트를 작성하고 싶습니다 .kolokwia.txt
kolokwium1.txt
kolokwium2.txt
새 파일에서는 이름과 숫자가 낮은 것부터 높은 것 순으로 정렬됩니다.
kolokvia.txt
Kowalski Jan 2 3
Nowak Adam 3 5
Malec Ewa 2 4
답변1
주어진
$ head kolokwium{1,2}.txt
==> kolokwium1.txt <==
Kowalski Jan 3
Nowak Adam 5
Malec Ewa 2
==> kolokwium2.txt <==
Malec Ewa 4
Kowalski Jan 2
Nowak Adam 3
그런 다음 사용밀러
mlr --nidx sort -f 1,2 -n 3 then \
nest --implode --values --across-records --nested-fs ' ' -f 3 kolokwium{1,2}.txt > kolokwia.txt
생산하다
$ cat kolokwia.txt
Kowalski Jan 2 3
Malec Ewa 2 4
Nowak Adam 3 5
답변2
출력이 아닌 OP의 file 에 대해 OP data1
's file 을 kolokwium1.txt
사용 하고 있습니다 .data2
kolokwium2.txt
data
kolokwia.txt
이를 수행하는 방법에는 여러 가지가 있습니다. 일부는 순전히 awk
.
join
다음은 첫 번째 열을 기반으로 한 다음 다음을 사용하여 숫자를 선택적으로 인쇄하고 정렬하는 (매우?) 간단한 솔루션입니다 awk
.
$ join -j 1 -t" " <(sort data1) <(sort data2) | awk '$5>$3 {print $1, $2, $3, $5} $3>$5 {print $1, $2, $5, $3}' >| data
$ cat data
Kowalski Jan 2 3
Malec Ewa 2 4
Nowak Adam 3 5
설명하다:
join
옵션-j 1: 두 입력 파일의 열 1을 연결합니다.join
옵션-티"": 입력 및 출력 필드 구분자로 ""(공백)을 사용합니다.- 표기법을
<(sort filename)
절차적 치환이라고 합니다. 여기에서 파일 이름을 사용하여 정렬 프로세스의 출력을 참조할 수 있습니다. 두 입력 파일 모두join
필요에 따라 정렬됩니다.<
절차적 대체에서는 여는 괄호와 닫는 괄호 사이에 공백이 있을 수 없습니다 .(
- 조인 결과는 첫 번째 열을 기준으로 정렬되지만 숫자로는 정렬되지 않습니다. 또한 두 번째와 네 번째 위치에는 각 사람의 이름이 반복됩니다.
- 위의 결과를 간단한
awk
cmd에 파이프하고 레코드 필드 5의 숫자가 레코드 필드 3자리의 숫자보다 큰지 또는 그 반대인지에 따라 조건부로 필드 1,2,3,5 또는 1,2,5,3을 인쇄합니다.
화타이