2013-08-22 6 views
1

file1.csv의 기존 문자열을 사용하여 file2.csv에서 문자열을 grep하고 일치하는 행을 result.csv 파일에 작성하려고합니다. 다음 bash 스크립트가 있어야합니다.파일에서 grep 결과를 출력 파일에 쓰지 않습니다.

cat file1.csv | while read line; do 
    grep $line ./file2.csv > result.csv 
done 

그러나 결국 result.csv는 항상 비어 있습니다. file2.csv에서 수동 grep을 수행하면 모든 것이 잘 동작합니다. 내가 뭘 잘못 했니?

15098662745072 
15098662745508 

file2.csv :

";"0";"15098662745072";"4590";"4590";" 
";"0";"15098662745508";"6400";"6400";" 
";"0";"15098662745515";"6110";"6110";" 
";"0";"15098662745812";"7970";"7970";" 

예상 된 결과 (result.csv) : file1.csv

";"0";"15098662745072";"4590";"4590";" 
";"0";"15098662745508";"6400";"6400";" 
+0

예상되는 결과와 file1.csv 및 file2.csv의 작은 예를 제공해주십시오. – svante

+0

@svante pls는 파일 시스템 –

+0

@ dogbane의 솔루션이 내 시스템에서 작동하는 업데이트 된 게시물을 참조하십시오. 철자/라인 피드/파일 권한을 확인하십시오. – svante

답변

4

> 파일을 덮어 쓰기를 유지합니다. 추가하려면 >>을 사용하십시오.

루프를 사용하는 대신 grep-f 옵션을 사용하여 grep 파일에서 패턴을 읽을 수 있습니다.

A) 그렙에 의해하지 않습니다 때문에,

while read line; do 
    grep "$line" ./file2.csv 
done <file1.csv> result.csv 
+0

bash 루프를 사용해야한다면'IFS ='를 추가하고 사용하지 않는 특정 기능이 없다면'read -r'을 사용하십시오. –

1
당신은 이것에 대한 AWK를 사용한다

은, grep을하지 : 당신은 루프를 사용해야하는 경우

grep -f file1.csv file2.csv > result.csv 

는 다음과 같은 방법을 사용 기본적으로 문자열을 찾으면 정규 표현식을 찾습니다. 문자열을 검색하려면 grep 대신 fgrep 또는 grep -F 또는 awk을 사용해야합니다.

b) file1.csv의 숫자가 file2.csv의 전체 특정 필드로 표시 될 때만 일치 시키려합니다. 줄에있는 모든 위치가 아닙니다.

awk -F'";"' 'NR==FNR{a[$0];next} $3 in a' file1.csv file2.csv > result.csv 
관련 문제