IBM AIX ksh에서 두 명령의 결과를 연결하는 방법

IBM AIX ksh에서 두 명령의 결과를 연결하는 방법

중간 파일(lsfs.out, df.out)을 생성하지 않고 ksh를 사용하여 IBM AIX에서 다음 스크립트를 실행하고 싶습니다.

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에 가입하세요.
  • 파일 시스템의 경로에 공백이 없다고 가정합니다(원래 질문이기도 함)

관련 정보