我的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")
}
答案 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 }