2017-12-10 20 views
0

두 개의 텍스트 파일에 공백으로 구분 된 값이 있습니다. 두 파일의 키 열을 기반으로 파일을 결합하고 다른 파일로 출력하려고합니다. 내가 뭘하려고하는 것은이 두 가지를 결합하는 것입니다
awk 명령의 조건에 따라 두 파일을 결합하는 방법은 무엇입니까?

2004-03-31 03:38:15.757551 2 1 122.153 -3.91901 11.04 2.03397 
2004-02-28 00:59:16.02785 3 2 19.9884 37.0933 45.08 2.69964 
2004-02-28 01:03:16.33393 11 3 19.3024 38.4629 45.08 2.68742 
2004-02-28 01:06:16.013453 17 4 19.1652 38.8039 45.08 2.68742 
2004-02-28 01:06:46.778088 18 5 19.175 38.8379 45.08 2.69964 
2004-02-28 01:08:45.992524 22 6 19.1456 38.9401 45.08 2.68742 


location.txt

1 21.5 23 
2 24.5 20 
3 19.5 19 
4 22.5 15 
5 24.5 12 
6 19.5 12 

데이터의 milllion을 가지고 data.txt로,하지만 난 여기에 간단한 몇 가지 항목을 줄 것이다, 키 값 에 기반한 파일 location.txt열 4 from data.txt에서 결과를 f 아래 data.txt로 및 2 열 및 3 location.txt에서 모든 데이터를 조합하여 ORMAT ..

2004-03-31 03:38:15.757551 2 1 122.153 -3.91901 11.04 2.03397 21.5 23 
2004-02-28 00:59:16.02785 3 2 19.9884 37.0933 45.08 2.69964 24.5 20 
2004-02-28 01:03:16.33393 11 3 19.3024 38.4629 45.08 2.68742 19.5 19 
2004-02-28 01:06:16.013453 17 4 19.1652 38.8039 45.08 2.68742 22.5 15 
2004-02-28 01:06:46.778088 18 5 19.175 38.8379 45.08 2.69964 24.5 12 
2004-02-28 01:08:45.992524 22 6 19.1456 38.9401 45.08 2.68742 19.5 12 

I awk 명령이 사용하고 :

awk -F' ' "NR==FNR{label[$1]=$1;x[$1]=$2;y[$1]=$3;next}; ($2==label[$2]){print $0 "," x[$2] y[$3]}" location.txt data.txt > result.txt 

하지만 예상대로 출력을 얻지 못하고 있습니다. 누구든지 해결하도록 도울 수 있습니까? CSV 형식의 결과 파일을 쉼표로 바꿀 수 있습니까?

+0

제안 : 1) 샘플 데이터를 짧게하여 5 줄을 말하고 5 줄만 줄입니다. 2) 원하는대로 정확히 예상 된 출력을 표시하십시오. 마지막에 작성한 내용을 놓치기 쉽습니다. 3) 자세한 방법을 설명하십시오. 출력이 도착했다. 코드에서 추측하기 쉽지 않다. – Sundeep

+0

awk에 익숙하지 않지만 awk 명령을 작성한 많은 예제를 참조한다. 내가하려는 것은 location.txt와 data.txt 파일 각각 1 열과 4 열을 컴파일하여 location.txt 데이터를 data.txt 파일에 추가하고 출력을 새 파일에 저장하는 것입니다. – Snkini

답변

1

:

$ awk ' 
NR==FNR {     # process location.txt 
    a[$1]=$2 OFS $3  # hash using $1 as key 
    next     # next record 
} 
$4 in a {     # process data.txt 
    print $0,a[$4]   # output record and related location 
}' location.txt data.txt # mind the file order 
2004-03-31 03:38:15.757551 2 1 122.153 -3.91901 11.04 2.03397 21.5 23 
2004-02-28 00:59:16.02785 3 2 19.9884 37.0933 45.08 2.69964 24.5 20 
2004-02-28 01:03:16.33393 11 3 19.3024 38.4629 45.08 2.68742 19.5 19 
2004-02-28 01:06:16.013453 17 4 19.1652 38.8039 45.08 2.68742 22.5 15 
2004-02-28 01:06:46.778088 18 5 19.175 38.8379 45.08 2.69964 24.5 12 
2004-02-28 01:08:45.992524 22 6 19.1456 38.9401 45.08 2.68742 19.5 12 
+0

감사합니다 @ JamesBrown, 내가 예상대로 출력을 가지고. – Snkini

1
배쉬와

및 가입

join -1 1 -2 4 <(sort -k1,1 -n location.txt) <(sort -k4,4 -n data.txt) -o 2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,1.2,1.3 

출력 :

 
2004-03-31 03:38:15.757551 2 1 122.153 -3.91901 11.04 2.03397 21.5 23 
2004-02-28 00:59:16.02785 3 2 19.9884 37.0933 45.08 2.69964 24.5 20 
2004-02-28 01:03:16.33393 11 3 19.3024 38.4629 45.08 2.68742 19.5 19 
2004-02-28 01:06:16.013453 17 4 19.1652 38.8039 45.08 2.68742 22.5 15 
2004-02-28 01:06:46.778088 18 5 19.175 38.8379 45.08 2.69964 24.5 12 
2004-02-28 01:08:45.992524 22 6 19.1456 38.9401 45.08 2.68742 19.5 12 

참조 : AWK에서 man join