得到最高数字然后在新文件中打印下一个数字

时间:2016-03-20 10:38:07

标签: shell

我有一个带管道分隔的文件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

1 个答案:

答案 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中比在其他的更复杂。