【发布时间】:2023-03-15 00:47:02
【问题描述】:
以下脚本:
#!/bin/bash
otscurrent="
AAA,33854,4528,38382,12
BBB,83917,12296,96213,13
CCC,20399,5396,25795,21
DDD,27198,4884,32082,15
EEE,2472,981,3453,28
FFF,3207,851,4058,21
GGG,30621,4595,35216,13
HHH,8450,1504,9954,15
III,4963,2157,7120,30
JJJ,51,59,110,54
KKK,87,123,210,59
LLL,573,144,717,20
MMM,617,1841,2458,75
NNN,234,76,310,25
OOO,12433,1908,14341,13
PPP,10627,1428,12055,12
QQQ,510,514,1024,50
RRR,1361,687,2048,34
SSS,1,24,25,96
TTT,0,5,5,100
UUU,294,1606,1900,85
"
IFS="," array1=(${otscurrent})
echo ${array1[4]}
打印:
$ ./test.sh
12
BBB
我正试图让它只打印 12...而且我什至不确定如何让它只打印第 5 行第 4 列
该变量是 sqlquery 的输出,已使用多个 sed 命令解析以将格式更改为 csv。
otscurrent="$(sqlplus64 user/password@dbserverip/db as sysdba @query.sql |
sed '1,11d; /^-/d; s/[[:space:]]\{1,\}/,/g; $d' |
sed '$d'|sed '$d'|sed '$d' | sed '$d' |
sed 's/Used,MB/Used MB/g' |
sed 's/Free,MB/Free MB/g' |
sed 's/Total,MB/Total MB/g' |
sed 's/Pct.,Free/Pct. Free/g' |
sed '1b;/^Name/d' |
sed '/^$/d'
)"
最终,我希望能够调用行和列并针对值运行语句。
最初我是把它输入:
awk -F "," 'NR>1{ if($5 < 10) { printf "%-30s%-10s%-10s%-10s%-10s\n", $1,$2,$3,$4,$5"%"; } else { echo "Nothing to do" } }')"
这可行,但我无法从 if else ... 运行命令,或者至少我不知道如何。
【问题讨论】:
-
Re:选择特定的行和列,这是知识库中已经存在的其他几个问题的欺骗。
-
awk不仅可以格式化/解析您的 csv 数据,它还可以像任何编程语言一样执行条件/循环等。