我有一个像这样的文本文件
A;green;3
B;blue;2
A;red;4
C;red;2
C;blue;3
B;green;3
我必须编写一个脚本,如果以参数"B"
启动,则会为我提供具有最大编号的行的颜色(从以B开头的行)。在这种情况下,它将是最后一行,因此输出将为"green"
。
如何按";"
- s和换行符分隔元素并将它们存储到矩阵中以便我可以使用它?我是否需要这样做,或者是否有更简单的解决方案?
提前致谢!
答案 0 :(得分:0)
awk
+ sort
解决方案:
awk -v param="B" -F';' '$1==param{ print $2; exit }' <(sort -t';' -k1,1 -k3nr file.txt)
输出:
green
或者除了@William Pursell的回答 - 只提取颜色值:
awk -F';' '/^B/ && $3>m{ m=$3; c=$2 }END{ print c }' file.txt
green
通过 bash 脚本:
get_max_color.sh
脚本:
#!/bin/bash
awk -F';' -v p="$1" '$0~"^"p && $3>m{ m=$3; c=$2 }END{ print c }' "$2"
用法:
bash get_max_color.sh B "file.txt"
green
答案 1 :(得分:0)
您只需要过滤掉相应的行并存储具有最大值的行。显而易见的解决方案是:
awk '/^B/ && $3 > m{s=$0} END { print s}' FS=\; input
要使用参数,请执行
awk "/^$1/"' && $3 > m{s=$0} END { print s}' FS=\; input
答案 2 :(得分:0)
非 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../js/jquery-3.2.1.min.js"></script>
</head>
<body>
<svg width="300" height="300" viewBox="0 0 300 300" >
</svg>
<script>
jQuery('<circle/>', {
r: "25",
cx: "80",
cy: "80"
}).appendTo('svg');
</script>
</body>
</html>
解决方案,可能不如已经提出的解决方案更优雅和更慢:
awk
答案 3 :(得分:0)
awk
救援!
可能不了解你想要实现的目标但是
awk -v key="$c" -F\; 'm[$1]<$3{m[$1]=$3; c[$1]=$2} END{print c[key]}' file
将从密钥
的文件中选择最高编码颜色一些糟糕的使用模式
$ for c in A B C;
do
echo $c "->" $(awk -v key="$c" -F\; 'm[$1]<$3 {m[$1]=$3; c[$1]=$2}
END {print c[key]}' file);
done;
A -> red
B -> green
C -> blue
您可以在awk
中实现脚本的其余部分并执行此过程一次。
或者,也许你想要一个关联数组,可以按如下方式完成:
$ declare -A colors;
while IFS=\; read k c _ ;
do
colors[$k]=$c;
done < <(sort -t\; -k1,1 -k3nr file | uniq -w1)
$ echo ${colors[A]}
red