对列应用计算(awk)

对列应用计算(awk),awk,Awk,我试着从第41列计算到这行的末尾: awk '{ { split($10,a,":") } { split( a[4], b ,",") } {print b[1]+b[2]}}' filename 我知道如何仅在一列上执行此操作,但当我尝试执行循环时失败: awk '{for (i=10;i<=NF;i++) {split($i,a,":")} {split(a[4],b,",")} {print ( b[1]+b[2])}}' filename 以下是我的实际输出

我试着从第41列计算到这行的末尾:

    awk '{ { split($10,a,":") } { split( a[4], b ,",") } {print b[1]+b[2]}}' filename
我知道如何仅在一列上执行此操作,但当我尝试执行循环时失败:

     awk '{for (i=10;i<=NF;i++) {split($i,a,":")} {split(a[4],b,",")} {print ( b[1]+b[2])}}' filename
以下是我的实际输出:

awk '{for (i=10;i<=NF;i++) {split($i,a,":")} {split(a[4],b,",")} {print b[1]+b[2]}}' file.vcf | head

0
0
0
0
0
提前感谢您的帮助

  • 更改了printf,在末尾添加了一个print(printf至少需要一个空格来分隔行的结果)
  • 根据您的示例,将41更改为小于28的数字(此数据集中awk只有28个字段)
  • 不同的拆分在循环之后,它们必须在循环范围内(请参见大括号的位置)
修改代码:

awk 'NR > 1 {
   for( i=41; i<=NF; i++) {
      split( $i, a, ":" )
       #print NF ":" i "[" $i "]  a[4]:" a[4]
      split( a[4], b, ",")
       #print i ": " b[1] " + " b[2] " : " b[1] + b[2]
      printf( "%d ",  b[1] + b[2])
      }
   print ""
   }' YourFile
awk'NR>1{

对于(i=41;iIs第二个循环中建议的printf-编码一个打字错误?您能显示预期的输出吗?对不起,我犯了一个错误,我以前使用print来使用printf这是我的输出:
awk'{for(i=41;i更正错误(如果有))在您的答案中,并在您的答案中包含预期的输出。可选地,提供了您的代码所获得的错误输出。
awk'NR>1{for(i=41;这是您的代码的输出!它将打印我的文件的整行:Ssorry忘记打印上的最后一行
(因此默认情况下,它将打印整行)
awk'NR>1{for(i=11;iStrange,在我的样本上(取你的,但修改了一些数字,使其具有不同的0来添加),计算是可以的,并且每行(第一行除外)。你能修改你的问题,以便有更准确的数据样本来测试(2行或3行似乎足够了)?
0 0 0 0 
1 2 0 6
2 0 0 8 
...
awk 'NR > 1 {
   for( i=41; i<=NF; i++) {
      split( $i, a, ":" )
       #print NF ":" i "[" $i "]  a[4]:" a[4]
      split( a[4], b, ",")
       #print i ": " b[1] " + " b[2] " : " b[1] + b[2]
      printf( "%d ",  b[1] + b[2])
      }
   print ""
   }' YourFile