0

次のbashコマンドがあります:

df -htgfs | awk '{print $5,$4}'| grep "^/"

次の出力が得られます。

/VAULT10 48%
/VAULT11 39%
/VAULT12 59%
/VAULT13 48%
/VAULT14 38%

ただし、以下の形式でお願いします。

/VAULT10 /VAULT11 /VAULT12 /VAULT13 /VAULT14  
48% 39% 59% 48% 38%

しかし、bashで簡単に実現する方法がわかりません(スペース、タブ、またはコンマで区切ることができます。とにかく、Excelスプレッドシートにコピー/貼り付けされるだけです)。

わかりやすくするために、生の df -htgfs 出力は次のとおりです (このボックスは GFS ディスク クラスタリングを実行します)。

Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/pool_gfs-pool_gfs
                      506G  368G  138G  73% /VAULT10
/dev/mapper/pool_gfs1-pool_gfs1
                      506G  202G  304G  40% /VAULT11
/dev/mapper/pool_gfs2-pool_gfs2
                      506G  200G  306G  40% /VAULT12
/dev/mapper/pool_gfs3-pool_gfs3
                      506G  260G  246G  52% /VAULT13
/dev/mapper/pool_gfs4-pool_gfs4
                      506G  237G  269G  47% /VAULT14

何か案は?

4

3 に答える 3

1

awkそれを処理できます:

df -htgfs | awk '$5~/^\//{name=name sep $5; size=size sep $4; sep=","} END{print name; print size}'
于 2013-09-10T09:26:48.833 に答える
1

ファイルを転置するための汎用ソリューション、Bash のみ。ファイルの内容は、行ごとに配列に入り、別の順序で書き出されます。

declare -a array                    # file content
IFS=' '                             # use $'\t' for tabs
ROWS=0                              # counts rows
COLS=0                              # counts columns

while read -a line ; do
  array+=( ${line[@]} )
  ((ROWS++))
done < "$infile"

COLS=$(( ${#array[@]}/ROWS ))       # get number of column

for (( row = 0; row < COLS; row++ )); do
  line=()
  for (( col = row; col < ROWS*COLS; col += COLS )); do
    line+=( ${array[col]} ) 
  done
  printf "%s\n" "${line[*]}" 
done 
于 2013-09-10T10:16:07.740 に答える