列から数字を読み、一緒に追加する方法

列から数字を読み、一緒に追加する方法

データセクションとbssセクションの下のコマンドラインのファイルサイズ情報に数字を追加できるようにしたいです。

./script.sh [file name]

これまで、シェルスクリプトを次のように書いています。

ExcPath=$1 #read file name from command line
Numberone= size $1 | $data #put data column into Numberone
Numbertwo= size $1 | $bss #put bss column into Numbertwo
sum=$(( $Numberone + $Numbertwo )) # calculate the sum of DATA and BSS
echo $sum 

$dataそして、$bssシェルが「data」列と「bss」列から読み取ると思われる変数は何ですか?

出力size test

text   data    bss    dec    hexfile name
2231    600      8   2839      b17   test

私のスクリプトを実行した後に予想される出力は次のとおりです。

608

シェルスクリプトでこれをどのように達成できますか?私は何が間違っていましたか?

ベストアンサー1

あなたのスクリプトが完全に間違っているようです。時間をかけて、シェルスクリプトに関するいくつかの基本的なチュートリアルを読んで、何をすべきかを理解してください。実際に必要であることに注意してください。読むファイルを変数に入れる代わりに。

この種の作業を処理する最も一般的なツールは次のとおりですawkawk

$ awk 'NR>1{print $2+$3}' file
608

NRは現在の行番号で、$N現在の行のN番目のフィールドです。したがって、コマンドはawk最初の行(NR>1)をスキップし、2番目と3番目のフィールドの合計を印刷するように指示します。


シェルひどい道具だファイルを解析するためにシェルで実行する必要がある場合は、次のことを試すことができます。

#/bin/bash

ExcPath=$1

## Now, skip the first line and read the rest
tail -n+2 "$ExcPath" |
  ## split on whitespace and save in the variables 
  while read text data bss dec hexfile name; do
    echo $(( $data + $bss))
  done

別の名前で保存しscript.shて、./script.sh filename次のように実行してください。

$ ./script.sh file
608

おすすめ記事