如何处理shell中的空白?

时间:2015-10-10 18:54:09

标签: bash shell sh

输入文件

      name;x1;x2
    jon,doe;10;20
    sam,smith;11;21

这是我到目前为止所尝试的

awk 'BEGIN {print "name\tx1\tx2\tAvg"} {s+=$2} {k+=$3} {print $1,"\t",$2,"\t",$3,"\t",($2+$3)/2} END {print s/2,k/2}' input.txt

我试图从输入文件中找到行和列的平均值,但最后我得到一个我不需要的零,我相信这是由于空白。有人可以帮我解决如何在这里处理空白区域吗?

预期输出应为:

name;x1;x2 Average 
jon,doe;10;20 15
sam,smith;11;21 16
Average 10.5 20.5

1 个答案:

答案 0 :(得分:2)

awk的默认输入字段分隔符是空格。这对于字段分隔符为分号的文件不起作用。要解决此问题,请使用$ awk -F';' '{sub(/^ +/,"");} NR==1 {print $0, "Avg";next} {s+=$2} {k+=$3} {print $0,($2+$3)/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 $0, "Avg";next} {s+=$2} {k+=$3} {print $0,($2+$3)/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

问题中的示例输出和上面的字段分隔符混合了分号和空格。如果你想一直使用分号:

{{1}}