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 回答
1

Perl 的救援:

df -h | perl -lane \
    'push @n,$F[-1] and push @p, $F[-2] if $#F and $F[-1] =~ m{^/} }{ $, = "\t"; print @n; print @p'
于 2013-09-10T10:19:02.977 回答