2012-10-25 1 views
8

AND 논리 연산자에 대한 기본적인 질문입니다. 열 1과 2의 값을 기준으로 데이터 파일 niveles.csv에서 일부 필드를 추출하려고합니다. "field1 = date 및 field2 = 영역을 입력 한 다음 3 ~ 5 필드를 인쇄 할 때"라는 awk 문장을 작성하고 싶습니다. . bash는 스크립트 내부 AWK의 문장Awk AND 연산자

date=01-08-2012 
area=8 
awk 'BEGIN {FS=";"} $1 ~ /'$date'/ && $2 ~ /'$area'/ { print $1 " " $2 " " $3 " " $4 " " $5 }' niveles-rams.cs 

입니다 그러나 이것은 단지 지역 번호가 내부에 8이 세 가지 경우에 대한 필드를 제공

01-08-12;1;0;0;0 
01-08-12;2;1;1;1 
01-08-12;3;0;0;1 
................ 

처럼

내 데이터 파일은 8, 18 (보이는 그리고 28) 단지 8 구역의 데이터 만 필요합니다.

01-08-2012 8 0 0 0 
01-08-2012 18 2 2 1 
01-08-2012 28 2 1 0 

미리 감사드립니다. 그것은 숙련 된 사용자를위한 간단한 질문입니다.

답변

7

은 테스트되지 않음 :

awk 'BEGIN {FS=";"} $1 ~ /'$date'/ && $2 == '$area'{......}' 

$에 2 ~/8/-> 2 필드가 포함 된 경우 이는 8

$ 2 == 8 -> 2 필드가 8

+0

감사합니다 , 나는 ~과 == – pacomet

+3

의 차이를 알지 못했습니다. 그러지 마세요! awk 스크립트를 구성하는 쉘 변수의 값에 액세스하는 방법은 http://cfajohnson.com/shell/cus-faq-2.html#Q24를 참조하고 여기 @ Barmar의 대답을 참조하십시오. –

+0

@EdMorton : 이것이 셸 변수에 액세스하는 올바른 방법이 아니라는 것에 동의합니다 ... 솔루션이 OP 솔루션 작업을 수행하도록 제공되었습니다 ... – Guru

9
동일한 경우 이는

awk의 -v 옵션을 사용하여 쉘 변수를 포함하는 awk 변수를 생성하십시오.

awk -v date="$date" -v area="$area" '$1 == date && $2 == area { ... }' 
0

, 나는 그것을 조금 테스트 준이 확인을해야 : 당신이 거기에 날짜와 지역 필드를 원하는 경우

date="01-08-12" 
area=8 
awk -F\; '$1 == "'$date'" && $2 == '$area' { print $3 " " $4 " " $5 }' niveles-rams.csv 

다음 AWK 문은 다음과 같습니다를 :

awk -F\; '$1 == "'$date'" && $2 == '$area' { print $1 " " $2 " " $3 " " $4 " " $5 }' niveles-rams.csv 
+0

아주 좋은 솔루션, 감사합니다 – pacomet

+1

아니, 그렇게하지 마! 쉘 변수의 값에 액세스하여 awk 스크립트를 작성하는 방법은 cfajohnson.com/shell/cus-faq-2.html#Q24를 참조하고 여기 @ Barmar의 대답을 참조하십시오. –

5

이 질문은 제목 때문에 많은 관심을 받고 있으므로 awkAND 연산자를 사용하는 방법을 다루는 일반적인 대답을 게시 해 드리겠습니다.

당신이 파일 myfile이 말 : 당신이 AND 연산자를 사용하여 일부 여러 검사를 할 수있는 방법을 찾고 있다면

a 1 2 3 
b 4 5 6 
c 7 8 9 

를,이 같은 &&를 사용해야합니다 :

awk '$2 < 10 && $3 > 2' myfile 

반환 값 :

b 4 5 6 
c 7 8 9 
일반적으로

, 당신이 원하는대로 당신이

AND --> && 
OR --> || 

그래서 당신은 예를 들어 같은 여러 논리 표현을 결합 할 수 있음을 고려하여, 많은 조건을 사용할 수 있습니다

awk '($2 < 10 || $3 > 2) && ($2 > 10 || $3 < 2)' myfile 
# ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^