複数の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

関連情報