我想使用 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- 假设文件系统在路径中没有空格(也是原始问题)