簡體   English   中英

如何在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+=$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

awk的默認輸入字段分隔符是空格。 這對於字段分隔符為分號的文件不起作用。 要解決此問題,請使用-F\\; 選項。 進行一些其他小的更改,請嘗試:

$ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM