如何处理 shell 中的空格?
How to handle whitespace in shell?
输入文件
name;x1;x2
jon,doe;10;20
sam,smith;11;21
这是我目前尝试过的方法
awk 'BEGIN {print "name\tx1\tx2\tAvg"} {s+=} {k+=} {print ,"\t",,"\t",,"\t",(+)/2} END {print s/2,k/2}' input.txt
我试图从输入文件中找到行和列的平均值,但最后我得到了一个我不需要的零,我相信这是由于白色 space。有人可以帮我在这里处理白色 space 吗?
预期的输出应该是:
name;x1;x2 Average
jon,doe;10;20 15
sam,smith;11;21 16
Average 10.5 20.5
awk 的默认输入字段分隔符是空格。这不适用于字段分隔符是分号的文件。要解决这个问题,请使用 -F\;
选项。通过其他一些小的更改,尝试:
$ awk -F';' '{sub(/^ +/,"");} NR==1 {print [=10=], "Avg";next} {s+=} {k+=} {print [=10=],(+)/2} END {print "Ave",s/(NR-1),k/(NR-1)}' OFS='\t' input.txt
name;x1;x2 Avg
jon,doe;10;20 15
sam,smith;11;21 16
Ave 10.5 20.5
问题和上面的示例输出混合了分号和空格作为字段分隔符。如果你想一直使用分号:
$ awk -F';' '{sub(/^ +/,"");} NR==1 {print [=11=], "Avg";next} {s+=} {k+=} {print [=11=],(+)/2} END {print "Ave",s/(NR-1),k/(NR-1)}' OFS=';' input.txt
name;x1;x2;Avg
jon,doe;10;20;15
sam,smith;11;21;16
Ave;10.5;20.5
输入文件
name;x1;x2
jon,doe;10;20
sam,smith;11;21
这是我目前尝试过的方法
awk 'BEGIN {print "name\tx1\tx2\tAvg"} {s+=} {k+=} {print ,"\t",,"\t",,"\t",(+)/2} END {print s/2,k/2}' input.txt
我试图从输入文件中找到行和列的平均值,但最后我得到了一个我不需要的零,我相信这是由于白色 space。有人可以帮我在这里处理白色 space 吗?
预期的输出应该是:
name;x1;x2 Average
jon,doe;10;20 15
sam,smith;11;21 16
Average 10.5 20.5
awk 的默认输入字段分隔符是空格。这不适用于字段分隔符是分号的文件。要解决这个问题,请使用 -F\;
选项。通过其他一些小的更改,尝试:
$ awk -F';' '{sub(/^ +/,"");} NR==1 {print [=10=], "Avg";next} {s+=} {k+=} {print [=10=],(+)/2} END {print "Ave",s/(NR-1),k/(NR-1)}' OFS='\t' input.txt
name;x1;x2 Avg
jon,doe;10;20 15
sam,smith;11;21 16
Ave 10.5 20.5
问题和上面的示例输出混合了分号和空格作为字段分隔符。如果你想一直使用分号:
$ awk -F';' '{sub(/^ +/,"");} NR==1 {print [=11=], "Avg";next} {s+=} {k+=} {print [=11=],(+)/2} END {print "Ave",s/(NR-1),k/(NR-1)}' OFS=';' input.txt
name;x1;x2;Avg
jon,doe;10;20;15
sam,smith;11;21;16
Ave;10.5;20.5