对列应用计算(awk)
我试着从第41列计算到这行的末尾:对列应用计算(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 以下是我的实际输出
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