Awk无法解析亵渎符号
awk脚本Awk无法解析亵渎符号,awk,Awk,awk脚本 awk 'BEGIN {FS = "\t"} $1==prev {printf "\t" $2} $1 != prev {printf "\n" $1,$2} {prev=$1}' 当它遇到亵渎的台词时就会倒下。下面的行在括号中用制表符分隔 Richard Pryor... Here and Now (1983) stand-up Richard Pryor... Here and Now (1983) stand-up-comedian Richard P
awk 'BEGIN {FS = "\t"} $1==prev {printf "\t" $2} $1 != prev {printf "\n" $1,$2} {prev=$1}'
当它遇到亵渎的台词时就会倒下。下面的行在括号中用制表符分隔
Richard Pryor... Here and Now (1983) stand-up
Richard Pryor... Here and Now (1983) stand-up-comedian
Richard Pryor... Here and Now (1983) stand-up-comedy
Richard Pryor: I Ain't Dead Yet, #*%$#@!! (2003) african-american
获得的误差
awk: cmd. line:1: (FILENAME=temp.list FNR=4) fatal: arg count with `$' must be > 0
另一行同样包含亵渎,但没有解析
Merry F#%$in' Christmas (2005) censored-profanity-in-title
同样,该选项卡位于括号中的年份之后。printf错误解释了您看到的问题:printf在格式说明符之后需要一个逗号:
Richard Pryor... Here and Now (1983) stand-up
Richard Pryor... Here and Now (1983) stand-up-comedian
Richard Pryor... Here and Now (1983) stand-up-comedy
Richard Pryor: I Ain't Dead Yet, #*%$#@!! (2003) african-american
{printf "\t%s", $2}
{printf "\n%s\t%s", $1,$2}
使用它的方式是,将换行符和$1连接起来,形成格式说明符。由于$1包含未捕获的%,printf会混淆并抛出错误
此外,您的最后一行不会以换行符结尾,因此在末尾添加此子句:
END {print ""}
printf错误解释了您看到的问题:printf在格式说明符后面需要一个逗号:
{printf "\t%s", $2}
{printf "\n%s\t%s", $1,$2}
使用它的方式是,将换行符和$1连接起来,形成格式说明符。由于$1包含未捕获的%,printf会混淆并抛出错误
此外,您的最后一行不会以换行符结尾,因此在末尾添加此子句:
END {print ""}
printf是造成语法问题的原因,这是正确的
一种优雅的方法是使用关联数组来构建字符串,这避免了复杂的边缘情况:
$ awk -F'\t' '{a[$1]=a[$1] (a[$1]?FS $2:$0)} END{for (k in a) print a[k]}' file
printf是造成语法问题的原因,这是正确的
一种优雅的方法是使用关联数组来构建字符串,这避免了复杂的边缘情况:
$ awk -F'\t' '{a[$1]=a[$1] (a[$1]?FS $2:$0)} END{for (k in a) print a[k]}' file
一个优雅的解决方案。输出的顺序将是随机的。使用GNU awk,您可以使用PROCINFO[sorted_in]=@ind_str_asc按索引值进行排序。请参阅Good tip@glennjackman我的基本假设是文件已按字典顺序排序,因此您可以在awk之后对其进行排序,以获得相同的顺序。这种方法的另一个好处是,文件不需要排序就可以工作。我处理的文件是250MB。我不想创建这么大的数组。一个优雅的解决方案。输出的顺序将是随机的。使用GNU awk,您可以使用PROCINFO[sorted_in]=@ind_str_asc按索引值进行排序。请参阅Good tip@glennjackman我的基本假设是文件已按字典顺序排序,因此您可以在awk之后对其进行排序,以获得相同的顺序。这种方法的另一个好处是,文件不需要排序就可以工作。我处理的文件是250MB。我不想创建这样大小的数组。