具有多个 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开始
  • awk 不支持a < b < c构造
  • 连接是通过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

相关内容