두 개의 파일이 있고 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을 인쇄합니다.
화타이