한 파일에서 도메인의 대역폭을 가져오고 다른 파일에서는 클릭 세부정보를 가져오려고 합니다.
두 파일의 형식은 다음과 같습니다.
대역폭.txt
aadrivingschool.ws 2840.36M aaspak.org 211.57M aasteknik.com 1419.26M aatonerpk.com 14.87M
히트.txt:
onlinestudyboard.com received 186 hits from 31/May/2016 at 1201 aaspak.org received 184 hits from 31/May/2016 at 1202 khawajarubber.com received 183 hits from 31/May/2016 at 1246 aatonerpk.com received 182 hits from 31/May/2016 at 1231
내가 얻고 싶은 것은 :
onlinestudyboard.com received 186 hits from 31/May/2016 at 1201
aaspak.org received 184 hits from 31/May/2016 at 1202 211.57M
khawajarubber.com received 183 hits from 31/May/2016 at 1246
aatonerpk.com received 182 hits from 31/May/2016 at 1231 14.87M
답변1
awk
한 가지 방법 은 다음과 같습니다 .
$ awk 'FNR==NR{a[$1]=$2; next} {print $0,a[$1]}' bandwidth.txt hits.txt
onlinestudyboard.com received 186 hits from 31/May/2016 at 1201
aaspak.org received 184 hits from 31/May/2016 at 1202 211.57M
khawajarubber.com received 183 hits from 31/May/2016 at 1246
aatonerpk.com received 182 hits from 31/May/2016 at 1231 14.87M
설명하다
awk
입력 파일을 한 줄씩 읽고 줄을 공백(또는 주어진 항목 -F
)의 필드로 분할합니다. 이러한 필드는 $1
$2 ...
$N`입니다.
NR==FNR
: NR은 현재 줄 번호, FNR은 현재 파일의 줄 번호입니다. 첫 번째 파일을 읽는 경우에만 둘 다 동일합니다.a[$1]=$2; next
: 이것이 첫 번째 파일인 경우(위 참조) 키가 첫 번째 필드인 배열에 두 번째 필드를 저장합니다.print $0,a[$1]
:현재 행( )과 첫 번째 필드와 연관된 배열$0
의 값을 인쇄합니다.a
그러면 두 번째 파일의 현재 줄과 첫 번째 파일의 첫 번째 필드와 관련된 모든 값이 인쇄됩니다.
답변2
그리고유형편집하다 가입하다,기둥그리고 일부세게 때리다교의:
join -a 1 <(sort hits.txt) <(sort bandwidth.txt) | column -t | sort -nrk3
세 가지 유형이 필요합니다. 두 번째는 입력 파일이 공통 필드별로 정렬되지 않기 때문입니다.가입하다정렬된 입력이 필요합니다. 다른유형(세 번째 필드, 역방향 숫자)는 OP의 정렬 순서를 복원하는 데 필요합니다.
산출:
onlinestudyboard.com received 186 hits from 31/May/2016 at 1201
aaspak.org received 184 hits from 31/May/2016 at 1202 211.57M
khawajarubber.com received 183 hits from 31/May/2016 at 1246
aatonerpk.com received 182 hits from 31/May/2016 at 1231 14.87M
출력 순서가 중요하지 않고 입력 파일이예사전 분류:
join -a 1 hits.txt bandwidth.txt | column -t