2014-04-29 2 views
0

유사한 파일을 병합 나는 다음과 같은 파일이는 AWK

파일 검색

Kmax Event File - Text Format 
1 6 1000 
1 4143 9256 13645 16426 20490 
49 4144 8820 14751 16529 20505 
45 4146 8308 12303 16912 22715 
75 4139 9049 14408 16447 20480 
23 4137 8449 13223 16511 20498 
22 4142 8795 14955 16615 20493 

파일 B에게

Kmax Event File - Text Format 
1 6 1000 
42 4143 9203 13401 16475 20480 
44 4140 8251 12302 16932 21872 
849 6283 8455 12301 16415 20673 
18 4148 8238 12757 16597 20484 
19 4144 8268 12306 17110 21868 
50 4134 8331 12663 16501 20606 
988 5682 8296 12306 16577 20592 
61 4147 8330 12307 16945 22497 
0 4138 8333 12310 16871 22749 

파일 C, 파일 D 있습니다. .. 그리고 모든 파일은 똑같습니다. 형식. 또한 각 파일의 파일 이름은 run, run%1, run%2, run%3, run%4 등입니다. 최대 파일 수는 run%30 인 30까지 가능합니다. 내가하고 싶은 무엇

Kmax Event File - Text Format 
1 6 1000 
1 4143 9256 13645 16426 20490 
49 4144 8820 14751 16529 20505 
45 4146 8308 12303 16912 22715 
75 4139 9049 14408 16447 20480 
23 4137 8449 13223 16511 20498 
22 4142 8795 14955 16615 2049 
42 4143 9203 13401 16475 20480 
44 4140 8251 12302 16932 21872 
849 6283 8455 12301 16415 20673 
18 4148 8238 12757 16597 20484 
19 4144 8268 12306 17110 21868 
50 4134 8331 12663 16501 20606 
988 5682 8296 12306 16577 20592 
61 4147 8330 12307 16945 22497 
0 4138 8333 12310 16871 22749 

가 나는 두 첫번째 라인의

awk '{i=$1;sub(i,x);A[i]=A[i]$0} FILENAME==ARGV[ARGC-1]{print i A[i]}' 

그러나이 방법으로 사용하여 그것을 할 수 있다고 생각 다음과 같은 방법으로 파일을 병합하는 것입니다 두 번째 파일이 나타납니다. 또한 위의 라인이 작동하는지 나는 모른다. 문제는 많은 파일을 동시에 병합해야한다는 것입니다. 거의 동일한 파일을 병합 할 생각은 없나요?

+0

병합 - 말의 연결을 말합니까? 그렇지 않은 경우 병합 기준을 설명하십시오. –

답변

1

쉘에 그룹화 괄호를 사용

{ cat run; sed '1,2d' run%*; } > c 
1

당신은 사용할 수 있습니다 cattail :

cat A > C && tail -n +3 B >> C이 C. 라는 새 파일에 파일 A와 B를 병합합니다

awk 사용 :

awk 'FNR==NR{print; next} FNR>2' A B > C 

당신은 이상이있는 경우 하나의 파일을 하나로 합치려면 awk 버전에서 A B 옆에 나열 할 수 있습니다 (예 : A B D). awk 버전의 C은 병합 된 데이터가 포함 된 출력 파일입니다.

cat에서

tail 버전 당신은 예컨대 다른 파일에 대한 코드의 tail 부분

cat A > C && tail -n +3 B >> C && tail -n +3 D >> C 

를 반복하거나 파일을 반복하는 루프의 어떤 종류를 만들 수 있습니다.

0

인쇄 파일의 나머지 부분에서 첫 번째 파일 (NR == FNR) 및 만 3 호선 및 모든 라인 (FNR> 2) :

awk 'NR==FNR||FNR>2' run*