Ksh

如何在 IBM AIX ksh 中加入兩個命令的結果

  • July 17, 2020

我想在下面執行腳本,但不使用 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.

一個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
  • 這假設沒有文件系統在路徑中有空格(也是原始問題)

引用自:https://unix.stackexchange.com/questions/598991