2015-01-22 2 views
0

저는 리눅스에 처음 접했고 두 파일의 정보를 어떻게 정렬하고 유지할 수 있는지 궁금합니다. 파일 중 하나와 동일한 출력 순서.파일과 인쇄 데이터를 정렬하지 않고 2 개의 목록을 비교하는 방법 파일 중 하나의 순서를 유지하는

파일 1 : 이름 목록 이름은

C_AWD_1

C_AWD_1

C_AWD_358

C_AWD_358

C_AWD_358

C_AWD_99

반복

C_AWD_99

C_AWD_3581

파일 2 : 이름 목록 + 공백으로 구분 된 정보는 (C_AWD_19897을 thousands-하는 C_AWD_1 -up 상상), 각 이름은 한 번만 존재합니다.

C_AWD_1 Av. 침대 : 18.90

C_AWD_2199 Av. Cot : 20.80

C_AWD_358 Av. 침대 : 198.56

C_AWD_3581 Av. Cot : 34.90

C_AWD_99 Av. Cotto : 539

내 원하는 출력은 파일 1과 동일한 순서로 이름 목록을 가져오고 탭 옆에있는 이름 옆에 해당 "Av. Cot"숫자 값이 있습니다. 모두에게 미리 감사드립니다.

출력 :

이름 Av. 침대

C_AWD_1 18.90

C_AWD_1 18.90

C_AWD_358 198.56

C_AWD_358 198.56

C_AWD_358 198.56

C_AWD_99 53.9

C_AWD_99 53.9

답변

0

perl이나 python과 같은보다 강력한 스크립팅 언어 중 하나를 알고 있습니까? 그들은 알아두면 편리합니다. 두 번째 파일을 먼저로드하고 C_AWD_를 키로하고 두 번째 숫자를 값으로 사용하여 해시 맵을 작성하면됩니다. 그런 다음 첫 번째 파일을로드하고 각 행에 대해 Av를 찾습니다. 해시 테이블에서 C_AWD 번호와 함께 사용되는 침대 번호. 출력에 해당 줄을 인쇄합니다.두 번째 파일은 첫번째 파일의 모든 라인에 대해 정확히 하나의 라인 매칭을 포함하는 경우

+0

안녕 Realh, 나는 파이썬을 배웠지 만, 당신이 제안한 모든 것을 이해할만큼 충분하지는 않다. (예 : 해시지도? .. 나는 그것을 google 할 것이다). 고맙습니다. 그래서 내가하려는 것은 리눅스 명령의 조합을 사용해서는 불가능합니다. – user2348601

+0

죄송합니다. 빨리 되돌아 오는 걸 잊었습니다. 사실 몇 가지 간단한 명령을 결합하여 가능합니다. @ barjomet의 스크립트는 스크립트 파일로 만들고 싶지 않은 경우 명령 줄에 입력 할 수있을만큼 짧습니다. 나는 그런 식으로 생각하지 않았습니다. 파일이 너무 길면 속도가 느려질 수 있습니다. 파이썬을 계속 배우면, 특히 리눅스에서 프로그램 할 수있게되면 훨씬 더 많은 힘을 얻을 수 있습니다. [Dive Into Python] (http://www.diveintopython3.net/) (또는 [구 버전] (http://www.diveintopython.net/))이 도움이 될 수 있습니다. 파이썬 해시 맵에서는 사전이라고 부릅니다. – realh

1

이 쉽게, bash는 함께 할 수있는,이 작동합니다

for line in $(cat file1); do 
    line=$(grep "$line Av." file2) 
    echo -e "$line\n" >> result 
done 

결과 :

$ cat result 

C_AWD_1 Av. cot: 18.90 

C_AWD_1 Av. cot: 18.90 

C_AWD_358 Av. Cot: 198.56 

C_AWD_358 Av. Cot: 198.56 

C_AWD_358 Av. Cot: 198.56 

C_AWD_99 Av. Cot: 53.9 

C_AWD_99 Av. Cot: 53.9 

C_AWD_3581 Av. Cot: 34.90 
+0

Barjomet 대단히 감사합니다. 매우 유용했습니다. 미안 해요, 돌아와서 내가 어떻게 지내는지 알려주는 데 미안 해요, 내 논문은 너무 현실 세계에서주의 산만합니다. 건배. – user2348601

+0

물론, 설명이 필요하면 그냥 물어보십시오. 실제로이 스크립트는 oneliner -'$ for (cat file1)에 대해 단축 될 수 있습니다. echo -e "$ (grep"$ i Av. "file2) \ n">> 결과; 완료 ", 또는 다른 한편으로는 추가 요구 사항이있는 경우이를 구체적으로 만들 수 있습니다. – barjomet

관련 문제