5番目の列を最も高い値にソートし、5番目の列と一致する場合は、4番目の列を選択したいと思います。
猫監視リスト
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
5番目の列の残りの行を数値の降順にソートします。最後に、awk
4番目の列を抽出します。
このアプローチは、列自体に空白文字が含まれていない限り機能します。
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;