열을 일치시켜 두 개의 CSV 파일을 결합하고 결합 명령

열을 일치시켜 두 개의 CSV 파일을 결합하고 결합 명령

열 1을 기준으로 일치시켜야 하는 두 개의 .csv 파일이 있습니다.

두 가지 파일 구조는 다음과 같습니다.

파일 1

gopAga1_00004004-RA,1122.825534,    -2.497919969,   0.411529843

gopAga1_00010932-RA,440.485381, 1.769511316,    0.312853434 

gopAga1_00007012-RA, 13.37565185,   -1.973108929,   0.380227982

etc...

파일 2

gopAga1_00004004-RA,    ENSACAP00000013845

gopAga1_00009937-RA,    ENSACAP00000000905

gopAga1_00010932-RA,    ENSACAP00000003279

gopAga1_00000875-RA,    ENSACAP00000000296

gopAga1_00010837-RA,    ENSACAP00000011919

gopAga1_00007012-RA,    ENSACAP00000012682

gopAga1_00017831-RA,    ENSACAP00000016147

gopAga1_00005588-RA,    ENSACAP00000011117

etc..

이것은 현재 Join을 사용하여 실행하는 명령입니다.

이것은 내가 다음 스레드에서 읽은 내용의 형식입니다.여기

join -1 1 -2 1 -t , -a 1 -e "NA" -o "2.2,1.1,1.2,1.3" <(sort -k 1 healthy_vs_unhealthy_de.csv) <(sort RBH.csv) > output.txt

그러나 이 프롬프트를 실행할 때마다 출력의 첫 번째 줄만 기록됩니다.

내 코드가 이렇게 작동하고 실제로 GOP ID를 기반으로 두 파일을 병합하지 않는 이유를 아는 사람이 있습니까?

답변1

구분 기호를 쉼표로 지정해야 합니다.sort

# join -1 1 -2 1 -t , -a 1 -e "NA" -o "2.2,1.1,1.2,1.3" <(sort -t',' -k 1 healthy_vs_unhealthy_de.csv) <(sort -t',' RBH.csv)
ENSACAP00000013845,gopAga1_00004004-RA,1122.825534,    -2.497919969
ENSACAP00000012682,gopAga1_00007012-RA, 13.37565185,   -1.973108929
ENSACAP00000003279,gopAga1_00010932-RA,440.485381, 1.769511316

답변2

~처럼시바는 정확하게 지적했다, 주요 문제는 sort유틸리티가 잘못 호출된다는 것입니다. 그러나 공백이 삽입되어 정렬에 문제가 발생할 수도 있습니다.

사용으로 전환csvkit 도구명령줄에서 CSV 파일을 구문 분석하고 처리하기 위해 이를 사용하여 csvjoin조인을 수행할 수 있습니다. 이는 입력 데이터에 빈 행이 없다고 가정합니다. 빈 줄이 있으면 를 통해 먼저 제거됩니다 grep -vx '[[:blank:]]*'.

csvjoin --no-header-row --skipinitialspace --columns=1 file1 file2

또는 짧은 옵션을 사용하세요.

csvjoin -HS -c 1 file1 file2

귀하의 질문에 데이터가 주어지면 다음이 출력됩니다.

a,b,c,d,b2
gopAga1_00004004-RA,1122.825534,-2.497919969,0.411529843,ENSACAP00000013845
gopAga1_00010932-RA,440.485381,1.769511316,0.312853434,ENSACAP00000003279
gopAga1_00007012-RA,13.37565185,-1.973108929,0.380227982,ENSACAP00000012682

나중에 제거할 수 있는 헤더를 추가합니다(아마도 사용 tail -n +2).

이를 재정렬하고 세 번째 열을 제거하려면 방금 언급한 추가된 헤더 csvcut도 제거합니다 .tail

csvjoin -HS -c 1 file1 file2 |
csvcut -c 5,1-3 |
tail -n +2

...결과는 다음과 같습니다.

ENSACAP00000013845,gopAga1_00004004-RA,1122.825534,-2.497919969
ENSACAP00000003279,gopAga1_00010932-RA,440.485381,1.769511316
ENSACAP00000012682,gopAga1_00007012-RA,13.37565185,-1.973108929

사용되는 열은 또는 유사한 조합 csvcut과 같은 임시 헤더를 사용하여 지정할 수도 있습니다 .-c b2,a,b,c-c b2,1-3

관련 정보