다섯 번째 열을 가장 높은 값으로 정렬하고 다섯 번째 열과 일치하면 네 번째 열을 선택하고 싶습니다.
고양이 감시 목록
C1 C2 C3 C4 C5 C6
3 No ENCRYPTION /opt/oracle/oradata/ORCLCDB/encryption.dbf 8 0
2 No RETENTION /opt/oracle/oradata/ORCLCDB/retention.dbf 5 0
4 No ORACLE /opt/oracle/oradata/ORCLCDB/oracle.dbf 2 0
1 No USERS /opt/oracle/oradata/ORCLCDB/users01.dbf 3 0`
다음과 같아야합니다.
for file in $C5; do
select $C4 from from dual;
done
select /opt/oracle/oradata/ORCLCDB/users01.dbf from dual;
select /opt/oracle/oradata/ORCLCDB/retention.dbf from dual;
select /opt/oracle/oradata/ORCLCDB/oracle.dbf from dual;
select /opt/oracle/oradata/ORCLCDB/encryption.dbf from dual;`
지금까지 시도한 것은 작동하지만 C1 값을 기준으로 출력을 읽지만 C5를 기준으로 출력을 가장 높은 것부터 가장 낮은 것까지 읽고 싶습니다.
for (( x=1; x <= ${FILE_COUNT}; x++)) ; do
FILE_NAME=cat $TABLE_LIST|sort -rk5 |awk -vx="$x" '$1 == x {print $4} $3 == x {print $1}'
FILE_SIZE=cat $TABLE_LIST|sort -rk5 |awk -vx="$x" '$1 == x {print $5} $3 == x {print $1}'
done
감사해요!
답변1
댓글에 따르면열 5에 지정된 순서(역순)로 열 4를 나열하려고 합니다.
$ sed '1d' <TABLE_LIST | sort -k5,5nr | awk '{ print $4 }'
/opt/oracle/oradata/ORCLCDB/encryption.dbf
/opt/oracle/oradata/ORCLCDB/retention.dbf
/opt/oracle/oradata/ORCLCDB/users01.dbf
/opt/oracle/oradata/ORCLCDB/oracle.dbf
이 sed
명령은 파일에서 헤더를 제거하고 sort
다섯 번째 열의 나머지 행을 숫자 내림차순으로 정렬합니다. 마지막으로 awk
네 번째 열을 추출합니다.
이 접근 방식은 열 자체에 공백 문자가 포함되어 있지 않은 한 작동합니다.
select
이들 과 from dual;
문자열을 삽입하려면 awk
파이프 부분을 수정할 수 있습니다.
$ sed '1d' <TABLE_LIST | sort -k5,5nr | awk '{ printf("select %s from dual;\n", $4) }'
select /opt/oracle/oradata/ORCLCDB/encryption.dbf from dual;
select /opt/oracle/oradata/ORCLCDB/retention.dbf from dual;
select /opt/oracle/oradata/ORCLCDB/users01.dbf from dual;
select /opt/oracle/oradata/ORCLCDB/oracle.dbf from dual;
답변2
GNU Awk > 4.0 사용
gawk '
FNR>1 {a[$5] = $4}
END {
PROCINFO["sorted_in"] = "@ind_num_desc";
for (i in a) print "select " a[i] " from dual;"
}
' TABLE_LIST
select /opt/oracle/oradata/ORCLCDB/encryption.dbf from dual;
select /opt/oracle/oradata/ORCLCDB/retention.dbf from dual;
select /opt/oracle/oradata/ORCLCDB/users01.dbf from dual;
select /opt/oracle/oradata/ORCLCDB/oracle.dbf from dual;