我有以下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
有什么想法吗?
答案 0 :(得分:1)
awk
可以解决这个问题:
df -htgfs | awk '$5~/^\//{name=name sep $5; size=size sep $4; sep=","} END{print name; print size}'
答案 1 :(得分: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'
答案 2 :(得分:0)
用于转置文件的通用解决方案,仅限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