我有一个带管道分隔的文件info.txt,你能告诉我如何获得最高的后缀并根据模式在其上添加条目吗?
info="$HOME/info.txt"
echo "Input the pattern: "
read pattern
awk '/pattern/{ print $0 }' $info >> $HOME/temp1.$$
sed 's/MICRO_AU_FILE//g' $HOME/temp1.$$
##then count highest num but i think not good approach
##if got he highest num then print next number
for ACC_NUM in `cat acc`
do
echo "$pattern-FILE$Highestsufix|server|$ACC_NUM*| >> $HOME/tempfile.$$
cat $HOME/tempfile.$$ >> $info
done
fi
info.txt
MICRO_AU-FILE01|serve|12345
MICRO_AU-FILE02|serve|23456
MICRO_AU-FILE04|serve|34534
MICRO_PH-FILE01|serve|56457
MICRO_PH-FILE02|serve|12345
MICRO_BN-FILE01|serve|78564
MICRO_BN-FILE03|serve|45267
ACC
11111
22222
输出:如果我的模式是MICRO_AU
MICRO_AU-FILE01|serve|12345
MICRO_AU-FILE02|serve|23456
MICRO_AU-FILE04|serve|34534
MICRO_PL-FILE01|serve|56457
MICRO_PL-FILE02|serve|12345
MICRO_BN-FILE01|serve|78564
MICRO_BN-FILE03|serve|45267
MICRO_AU-FILE05|serve|11111
MICRO_AU-FILE06|serve|22222
答案 0 :(得分:0)
我会提取后缀,按数字递增排序,然后取最高值。如果输入与示例中一样规则,则只需
HIGHEST_INDEX=$(cut -c 14,15|sort -nr|head -n 1)
如果线条的结构可能不同,则必须根据您的尝试调整数字选择器(cut -c 14,15
)。
更新:我刚看到,您已使用 shell 标记了您的问题,而没有使用 bash , zsh 或 ksh标记您的问题。如果您还需要在Bourne Shell上运行程序,则必须使用
HIGHEST_INDEX=`cut -c 14,15|sort -nr|head -n 1`
一般情况下,最好使用此类问题,如果您明确声明,您的程序应运行在哪个shell上。在这方面你越具体,我们可以提出更好的解决方案。例如,获取下一个更高的数字(在HIGHEST_INDEX之后)在Bourne shell中比在其他的更复杂。