2017-12-18 25 views
0

! = 문을 단순화하는 방법. 나는 이처럼 많은 가치를 가지고있다.AWK의 데이터베이스가 아닙니다.

if (charNr%2 == 0 && newChar != " " && newChar !="0" && newChar !="1" && newChar !="2" && newChar !="3" && newChar !="4" && newChar !="5" && newChar !="6" && newChar !="7" && newChar !="8" && newChar !="9") {newStr = newStr newChar } 

AWK AIX 7.1.2 기능에서 사용하고 싶다. 도와주세요.

if (charNr%2 == 0 && newChar NOT IN (1 2 3 4 5 6 7 8 9 0)) {newStr = newStr newChar } 
+0

[편집] 귀하의 질문에 간결하게 제공하기 위해, testab 르 샘플 입력 및 예상 출력 지금 당장 우리는 여러분이 필요로하는 것을 모두 추측하고 있습니다. 그래서 결국 당신이하는 해결책은 여러분이 실제로하려고하는 것이 무엇이든 최선이 아닐 수도 있습니다. 지금 당장은 newChar! ~/[0-9] /'를 사용하여 요청한 것을 할 수 있지만 실제 필요에 완전히 잘못 될 수 있습니다. –

답변

4

같은

내가 기대하고 뭔가 awk는의 in 연산자는 배열의 키와 함께 작동, 그래서 당신은 할 수 있습니다 :

귀하의 예를 들어
keys["foo"]; 
"foo" in keys # true 

, 당신은 포함하는 배열을 만들 것 모든 키를 먼저 선택하십시오.

keys[1]; keys[2]; keys[3]; # etc. 

당신을 돕기 위해 루프를 사용할 수 있습니다

for (i = 0; i < 10; ++i) keys[i] # set keys from 0 to 9 
newChar in keys # true if newChar is 0-9 

을 일반적인 경우에, 당신은 사용할 수 있습니다

input = "first,second,third,fourth" 
n = split(input, temp, /,/) 
for (i = 1; i <= n; ++i) keys[temp[i]] 
+0

또한 split 함수를 사용하여 배열을 초기화 할 수 있습니다. ex :'awk 'BEGIN {split ("1,2,3", a, /, /); print a [2]} '' ' – Sundeep

+0

키와 값이 일치하기 때문에 약간 잘못된 것입니다. 그러나'a '의 키가 항상 1, 2, 3, 4,'split이기 때문에 일반적으로 작동하지 않습니다 '문자열을 사용하여 값을 가져옵니다. –

+0

네 말이 맞아, 나는 그걸 놓쳤다. 나는 키들이 아니라 가치에 대해서 생각하고 있었다. – Sundeep

1

당신의 블랙리스트 당신이 목록을 가지고 있다고 가정 쉬운 방법이 한 자리이지만, 경우 임의의 토큰으로,이 트릭

awk -v n='t1 t2 t3 t4' 'FS n FS !~ FS $1 FS' 

을 사용할 수는 목록의 시작 부분과 끝 부분에 FS를 추가하고 FS 패딩 키워드 (여기 $1와 패턴 일치를 확인, 대체 귀하의 변수와 함께). 여기서 기본 필드 구분 기호가 사용된다고 가정하면 그렇지 않으면 토큰 목록에서 동일한 구분 기호를 사용하십시오. 예를 들어

,

$ awk -v n='11 13 17 19' 'FS n FS !~ FS $1 FS' < <(seq 10 20) 

10 
12 
14 
15 
16 
18 
20 

목록 임의의 단일 문자 (또는 자리), 당신은 단순화하기 위해

$ awk 'FS $1 FS !~/[2357] /' < <(seq 10) 

1 
4 
6 
8 
9 
10 
0

로 단순화 할 수있는 경우는 !=는에서 원치 않는 값을하는 것입니다 이 같은 배열 및 (value in array==0)에, :

$ awk ' 
BEGIN { 
    for(i=0;i<=9;i++) a[i] # add values 0...9 to array a 
} 
($1 in a==0) {    # if value is not found in array 
    print     # print it 
}' <(seq 1 12)    # test values 
10 
11 
12