AWK在CSV文件中选择值时出错

时间:2013-10-31 17:58:23

标签: csv awk

我的CSV文件有47列,我想按某个字段的值选择第36-47列。 从第36列到第47列,每个条目都是这样的:“1/1:0,297: 297 :99:10476,951,0”

我使用以下AWK代码将此条目拆分为“:”,并检查array [3]> = 20(上面突出显示的是数组[3]中的297.如果它通过了检查,则打印出来输入新的CSV,否则打印出“./。”。我需要打印出前35列没有条件。

当我在名为awk_byDP(chmod u + x)的文件中运行以下代码时,它会给我这个错误:

  

/ usr / bin / awk:源代码行6源文件./awk_byDP的语法错误   上下文是

     
    
      
        

? <<< / usr / bin / awk:源代码行6源文件./awk_byDP

的非法语句       
    
  
#!/usr/bin/awk -f

BEGIN {-F","; OFS=","}
 NR <= 1 {next}
 NR > 1 {
     for (j=1; j<=35; j++) { printf("%s",  $j) } #line 6  

     for (i=36; i<=47; i++) {
     t=$i;
     split(t,a,":")
     if ( a[3]>=20 ) {
            printf(“%s”, $i)
       }  
       else {
          printf(“%s”, "./.")
       }
     }
    printf("\n")
}

2 个答案:

答案 0 :(得分:2)

您的语法错误位于BEGIN部分。改变这个:

BEGIN {-F","; OFS=","}

到此:

BEGIN {FS=OFS=","}

你有一些小问题,主要是化妆品/风格问题,这里是你脚本的清理版本:

BEGIN { FS=OFS="," }
NR > 1 {
    for (j=1; j<=35; j++) {
        printf "%s",  $j
    }  

    for (i=36; i<=47; i++) {
        split($i,a,/:/)
        if ( a[3]>=20 ) {
            printf "%s", $i
        }  
        else {
            printf "./."
        }
    }
    print ""
}

答案 1 :(得分:0)

更改为:

 for (j=1; j<=35; j++) { printf "%s",  $j }