次のデータがありますが、特定のフィールドから始めて値を計算または合計する必要があります。必須フィールドの計算 以下の例は Field5 から取得されます。たとえば、Field5の合計は42、field6の合計は107です。
入力ファイル:
A,B,C,D,42,52,23,101,5,1,0,0,0
A,B,C,D,0,52,3,0,5,0,0,0,0
A,B,C,D,0,1,4,0,4,0,0,0,0
A,B,C,D,0,2,2,0,1,0,0,0,0
予想出力:
Field5=42, Field6=107, Field7=32, Field8=101, Field9=15, Field10=1
このコードを試してみると、間違ったコードであることがわかりました。笑
echo "A,B,C,D,42,52,23,101,5,1,0,0,0
A,B,C,D,0,52,3,0,5,0,0,0,0
A,B,C,D,0,1,4,0,4,0,0,0,0
A,B,C,D,0,2,2,0,1,0,0,0,0" | awk -F"," '{for(i=0;i<=NF;i++){C++}} END {print i"=" C}'
答え1
あなたはそれを使用することができます:
awk -F"," '{for (i=5;i<=NF;i++){a[i]=a[i]+$i}} END { for (i in a){ print "Field" i "=" a[i]}}' file
あなたの場合は印刷されます
Field5=42
Field6=107
Field7=32
Field8=101
Field9=15
Field10=1
Field11=0
Field12=0
Field13=0
答え2
以下でawkを試してください。コマンドは次のとおりです。
j=`awk -F "," '{print NF}' filename| sort -nr| sed -n '1p'`
for ((i=5;i<=$j;i++)); do awk -v i="$i" -F "," 'BEGIN{sum=0}{sum=sum+$i}END {print "Field"i"=" sum}' filename; done| perl -pne "s/\n/, /g"
出力:
Field5=42, Field6=107, Field7=32, Field8=101, Field9=15, Field10=1, Field11=0, Field12=0, Field13=0