2014-06-18 2 views
-1

각 행에 ID, 숫자의 목록이 포함 된 CSV 파일이 있습니다. 그 파일을 ids.csv라고 부르 자. 디렉토리에 나는 "file_123456_smth.csv"라는 이름의 파일을 가지고있다. 123456은 id csv 파일에서 찾을 수있는 id이다. 지금, 달성하고자하는 것은 무엇인가? 파일 이름을 ids.csv에 저장된 ID와 비교하십시오. ids.csv에 123456이 있으면 파일 이름이 표시되어야합니다. 내가 무엇을 시도했다 :파일 이름 목록을 CSV 이름 목록과 대조합니다.

물론
ls -a | xargs grep -L cat ../../ids.csv 

이 작동,하지만 내 방향의 아이디어를 제공하지 않습니다.

+0

내가 파이썬 태그 이유를 모르겠지만, 당신이 아닌 경우 2 차 해법을 원한다면, 집합이나 사전을 사용할 수 있습니다. – user189

+0

@ user189 Python은 자동으로 SO에 의해 제안되었으며 거기에 눈치 채지 못했습니다. – maephisto

답변

2

내가 제대로 이해한다면 ... 볼 수 있습니다

$ cat ids.csv 
123 
456 
789 

$ ls *.csv 
file_123_smth.csv file_321_smth.csv file_789_smth.csv ids.csv 

$ ./c.sh 
123 found in file_123_smth.csv 
789 found in file_789_smth.csv 

c.sh은 다음과 같다 여기서

#!/bin/bash 

ID="ids.csv" 

for file in *.csv 
do 
    if [[ $file =~ file ]] # just do the filtering on files 
    then      # containing the actual string "file" 
     id=$(cut -d_ -f2 <<< "$file") 
     grep -q "$id" $ID && echo "$id found in $file" 
    fi 
done 
+0

예제가 훌륭하게 작동하지만 실제 파일 이름으로 업데이트하려고하면 실제 파일 이름은 다음과 같습니다 : Offerfeed_9901223_en.full.csv. 어떻게해야합니까? 감사! – maephisto

+0

또한 [[$ file = ~ file]]이 어떻게해야하는지 설명해 주시겠습니까? – maephisto

+0

다행히 좋았어! 연산자'= ~'는 bash 정규 표현식입니다. "file"문자열이 파일 이름에 있는지 확인하기 위해이 파일을 사용합니다. 그 이유는 '* .csv'를 globbing으로 사용하여 구문 분석 할 모든 파일을 나열하기 때문에 올바른 파일 이름에서만 구문 분석을 수행하고'ids.csv'에서는 구문 분석을 수행하지 않기 때문입니다. –