여러 if와 교체로 awk

여러 if와 교체로 awk

나는 awk에서 이와 동등한 작업을 수행하고 싶습니다(명령줄에서 각 줄에 대해).

items = split(',')
if items[2] >= 10:
  return items[0], items[1], 7
if 4 < items[2] < 10:
  return items[0], items[1], 2
return  items[0], items[1], 1

파일은 csv 형식이며 3개의 필드가 있습니다.

답변1

다음 텍스트를 xxx.awk와 같이 저장합니다.

#!/usr/bin/awk -f
BEGIN {
   FS="," ; 
}{
   if ( $3 >= 10 ) {
      print $1" "$2" "7 ; 
   } else if ( 4 < $3 && $3 < 10 ) {
      print $1" "$2" "2 ;
   } else {
       print $1" "$2" "1 ;
   }
}

그런 다음 실행하십시오.

./xxx.awk  yourCSVfile

실행하기 전에 "chmod +x xxx.awk" 명령줄을 실행해야 합니다.

답변2

  • 분할 구문은 다음과 같습니다(배열의 문자열 분할 split(i,items,","), 구분)iitems,
  • 인덱스는 1부터 시작합니다.
  • a < b < cawk는 구성을 지원하지 않습니다
  • 연결은 다음을 통해 이루어집니다.a b

당신은 단지 원한다

split(i,items,",")
if (items[3] >= 10)
  return items[1] items[2] 7 ;
if (4 < items[3] ) ## if item[2]>=10, code isn't reached
  return items[1] items[2] 2 ;
return  items[1] items[2] 1

제공 (입력 문자열 => 결과)

11,11,11 => 11117
5,5,5 => 552
1,1,1 => 111

관련 정보