[英]awk procedure in bash script
我有一個任務:為存儲在文件中的整數求和編寫一個腳本。 形成呼叫腳本:示例:sum a.txt 3 4
輸入文件可以包含幾列整數。 各個列由“規范”或“制表符”分隔。 該腳本應匯總適當的列,並將結果寫入stdout。 因此,當我們有“ sum a.txt 3 4”時,我們需要添加第三和第四列文件的編號。
所以我這樣做:
#!/bin/bash
array1=( "$@" )
let LA=${#array1[@]}-1
awk '{for(i=1;i<=$LA;i++)y+=$'${array1[i]}'; print y}' a.txt
但我有一個錯誤:awk::1個意外字符'。
請幫忙,是否有另一種方法可以累加過程調用腳本中給出的列數?
如果您要傳遞3個參數求和
#!/bin/bash
awk -v col1=$2 -v col2=$3 '{sum1 += $col1; sum2 += $col2} END{print sum1,sum2}' $1
當腳本作為sum a.txt 3 4
調用時,則
$1 = a.txt
$2 = 3
$4 = 4
編輯
如果列數可以變化
#!/bin/bash
filename=$1
cols=${@:2:$#}
awk -v c="$cols" '{split(c, cols, " "); for (col in cols) sum[col]+=$col} END{for (i in sum) print sum[i]}' $filename
說明
-vc="$cols"
創建awk變量c
並傳遞列列表
split(c, cols, " ")
拆分列列表c
以獲取一個數組,cols
for (col in cols) sum[col]+=$col
cols
數組中每個列值的for (col in cols) sum[col]+=$col
找到總和, sum[col]+=$col
END{for (i in sum) print sum[i]}
打印sum
數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.