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