如何在 IBM AIX ksh 中连接两个命令的结果

如何在 IBM AIX ksh 中连接两个命令的结果

我想使用 ksh 在 IBM AIX 上执行下面的脚本,但不创建中间文件(lsfs.out、df.out)

lsfs_out=`lsfs | sed -n '1d;p' | sort -b -k 3`
df_out=`df -k | sed -n '1d;p' | sort -b -k 7`
echo "$lsfs_out" > lsfs.out
echo "$df_out" > df.out
join -1 7 -2 3 df.out lsfs.out

第一个命令的输出如下所示:

lsfs | sed -n '1d;p' | sort -b -k 3
/dev/hd4        --         /                      jfs2  4194304 --         yes  no
/dev/hd11admin  --         /admin                 jfs2  1048576 --         yes  no

第二个命令的输出是:

df -k | sed -n '1d;p' | sort -b -k 7
/dev/hd4          2097152    836284   61%     9360     5% /
/dev/hd11admin      524288    523848    1%        7     1% /admin

我无法理解如何用命令输出替换“join”命令的文件名。

我所做的尝试是无用的。例如:

join -1 7 -2 3 <(echo "$df_out") <(echo "$lsfs_out")
ksh: 0403-057 Syntax error: `(' is not expected.

多一个

join -1 7 -2 3 <`echo "$df_out"` <`echo "$lsfs_out"`
A file or path name is too long.
< some output >
Cannot find or open the file.

答案1

一个awk解决方案(当然可以在线)

(df -k ; lsfs ) |
awk 'FNR==1 {next; }
     NF==7 { L[$7]=$0 ; next ; }
     { printf "%s %s\n",$0,L[$3];}'

在哪里

  • FNR==1 {next; }过滤器标头
  • NF==7 { L[$7]=$0 ; next ; }存储在文件系统上索引的 df 行
  • { printf "%s %s\n",$0,L[$3];}打印 lsfs 行并加入 df's
  • 假设文件系统在路径中没有空格(也是原始问题)

相关内容