簡體   English   中英

bash腳本中的awk過程

[英]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.

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