awk-三元条件表达式不工作

awk-三元条件表达式不工作,awk,Awk,输入(示例) \u按账户核对。awk #! /usr/bin/awk -f # # Group together lines (records) by account name BEGIN { FS = ":" } ### generate headers ### {s = $1} {if (s != p) print "\n\n=== ", s " ===" } {p = s} ### process records ###

输入(示例)

\u按账户核对。awk

#! /usr/bin/awk -f
#
# Group together lines (records) by account name

BEGIN { FS = ":" }

### generate headers ###
{s = $1}
{if (s != p)
  print "\n\n=== ", s " ==="
}
{p = s}

### process records ###
# print field $2 to last field
{for (i = 2; i <= NF; ++i)
#   {if (i!=NF) printf $i":"; else printf $i}
    { i != NF ? printf $i":" : printf $i }
}
{printf "\n"}
解决方案,感谢:

过程记录### #将字段$2打印到最后一个字段
{for(i=2;i括号无法修复:
{(i!=NF)?printf$i:“:”:printf$i}
printf不能在三元运算符内,即使用
printf“%s%s”,$i,(i!=NF?”:“)
谢谢,现在已经修复了。。不过现在我对每条记录(行)都有另一个问题打印n次,其中n取决于有多少分隔符,因此这是循环的语义错误,我将对此进行调查:d您介意在您发布的代码片段中解释
%s%s
吗?我也在阅读printf,因为我对它不太熟悉。请随意发布答案,如果不介意,我将自己发布一个答案d credit you.nvm现在我读了一点它就有意义了,它们是传递进来的字符串的占位符,第一个是
$I
,第二个是
:“
如果
I!=NF
else
。编写代码的惯用方法是
'BEGIN{OFS=“:”}{for(i=2;我感谢你的例子,知道最简洁、恰当和惯用的解决方法是有用的。如果你想把它写成解释的答案,我会考虑把它标记为已批准的答案。如果你给问题加上简洁、可测试的样本输入和预期的输出,那么我会看一看。我(我怀疑很多人)。我还没有读过这个问题,因为这个问题目前还没有找到,所以我想知道你的答案是不是最好的。
#! /usr/bin/awk -f
#
# Group together lines (records) by account name

BEGIN { FS = ":" }

### generate headers ###
{s = $1}
{if (s != p)
  print "\n\n=== ", s " ==="
}
{p = s}

### process records ###
# print field $2 to last field
{for (i = 2; i <= NF; ++i)
#   {if (i!=NF) printf $i":"; else printf $i}
    { i != NF ? printf $i":" : printf $i }
}
{printf "\n"}
awk: scripts/utils/metadata/__collate-by-account.awk:18:        { i != NF ? printf $i":" : printf $i }
awk: scripts/utils/metadata/__collate-by-account.awk:18:                    ^ syntax error
awk: scripts/utils/metadata/__collate-by-account.awk:18:        { i != NF ? printf $i":" : printf $i }
awk: scripts/utils/metadata/__collate-by-account.awk:18:                                 ^ syntax error
### process records ###
# print field $2 to last field
{for (i = 2; i <= NF; ++i)
    { printf "%s%s",$i,(i!=NF?":":"") }
}
{printf "\n"}