用于处理未格式化输入的awk
想知道如何处理下面的情况,示例输入由空格分隔,并希望格式化为逗号分隔的输出。 在第一个以数字开头的字段之前,一行中的所有文本都应视为输出中的单个字段。在样本数据中,在一行的末尾总是有3个数字字段;在实际数据中,有14个这样的字段 Input.txt用于处理未格式化输入的awk,awk,Awk,想知道如何处理下面的情况,示例输入由空格分隔,并希望格式化为逗号分隔的输出。 在第一个以数字开头的字段之前,一行中的所有文本都应视为输出中的单个字段。在样本数据中,在一行的末尾总是有3个数字字段;在实际数据中,有14个这样的字段 Input.txt mmm 4394850 4465411 2579770 xxx yyy 2155419 2178791 1516446 aaa bbb (incl. ccc) 14291585 14438704 6106341 U.U.(W) 6789781 688
mmm 4394850 4465411 2579770
xxx yyy 2155419 2178791 1516446
aaa bbb (incl. ccc) 14291585 14438704 6106341
U.U.(W) 6789781 6882021 5940226
nnn 7335050 7534302 2963345
已尝试以下命令,但我知道它不完整:
awk 'BEGIN {FS =" "; OFS = ","} {print $1,$2,$3,$4,$5,$6} ' Input.txt
期望输出:
mmm,4394850,4465411,2579770
xxx yyy,2155419,2178791,1516446
aaa bbb (incl. ccc),14291585,14438704,6106341
U.U.(W),6789781,6882021,5940226
nnn,7335050,7534302,2963345
对于gensub(),使用GNU awk:
对于其他awk,将第二个substr()输出保存在一个var中并使用gsub():
对于gensub(),使用GNU awk:
对于其他awk,将第二个substr()输出保存在一个var中并使用gsub():
假设最后3列是数值列(如您的示例所示):
awk'{for(i=1;i假设最后3列是数字列(如您的示例所示):
awk'{for(i=1;i另一个awk
awk '$0=gensub(/ ([0-9]+)/,",\\1","g")' file
mmm,4394850,4465411,2579770
xxx yyy,2155419,2178791,1516446
aaa bbb (incl. ccc),14291585,14438704,6106341
U.U.(W),6789781,6882021,5940226
nnn,7335050,7534302,2963345
另一个awk
awk '$0=gensub(/ ([0-9]+)/,",\\1","g")' file
mmm,4394850,4465411,2579770
xxx yyy,2155419,2178791,1516446
aaa bbb (incl. ccc),14291585,14438704,6106341
U.U.(W),6789781,6882021,5940226
nnn,7335050,7534302,2963345
在您尝试处理数字字段时,没有逻辑尝试以不同的方式处理。输入是否始终采用相同的格式?例如,每行末尾是否始终有3个数字字段?Tom Fenech,每行末尾有14个数字字段在您尝试处理数字字段时,没有逻辑尝试处理数字字段ELD不同。输入的格式是否始终相同?例如,每行末尾是否始终有3个数字字段?Tom Fenech,每行末尾有14个数字字段Tom Fenech,非常感谢,但如果输入行是a&B 8399153 8530270 131117,则上述命令失败。输出是a,&,B,839915385302701311117I无法r使用我的代码生成那个输出。你们是否使用了代码中的BEGIN
块或其他什么?Tom Fenech,是的,我理解这个问题,最后一列数字字段并不总是像14个字段那个样恒定,有些行有14个字段,有些行有10个数字字段,非常感谢,但若输入行是A&B 8399153 8530270 131117输出是A,&,B,83991538530270131117我不能用我的代码复制那个输出。你们是否使用了代码中的BEGIN
块或其他什么?Tom Fenech,是的,我理解这个问题,最后一列数字字段并不总是像14个字段一样恒定,有些行有14个字段,其中一些用于10个数值场等
awk '{for(i=1;i<=NF;++i)printf "%s%s",$i,(i<NF-3?OFS:(i<NF?",":ORS))}' file
awk '$0=gensub(/ ([0-9]+)/,",\\1","g")' file
mmm,4394850,4465411,2579770
xxx yyy,2155419,2178791,1516446
aaa bbb (incl. ccc),14291585,14438704,6106341
U.U.(W),6789781,6882021,5940226
nnn,7335050,7534302,2963345