我需要能够使用bash从文本文件中打印最大的记录值

时间:2014-10-31 02:43:30

标签: bash unix

我是bash编程的新手,我遇到了障碍。

我需要能够计算txt文件中的最大记录数并将其存储到函数中的变量中。

这是文本文件:
student_records.txt

12345,fName lName,Grade,email
64674,fName lName,Grade,email
86345,fName lName,Grade,email 

我需要能够获得最大的记录号($ 1或第一个字段),以便我增加此唯一记录并向文件添加更多记录。我似乎无法想出这个。

首先,我按第一个字段按降序对文件进行排序,然后执行此操作:

largest_record=$(awk-F,'NR==1{print $1}' student_records.txt)
echo $largest_record

这在控制台上出现以下错误:

awk-F,NR==1{print $1}: command not found

有什么想法吗?另外,有关如何以最佳方式完成此任务的任何建议?

提前谢谢你。

2 个答案:

答案 0 :(得分:2)

largest=$(sort -r file|cut -d"," -f1|head -1)

答案 1 :(得分:1)

您需要空格和引号

awk -F, 'NR==1{print $1}'

命令是awk,你需要一个空格,所以bash正确解析你的命令行,否则它认为整个命令的名称,这是错误信息告诉你的。< / p>

了解如何使用man命令,以便学习如何调用其他命令:

man awk

这将告诉您-F选项的作用:

  

-F fs选项将输入字段分隔符定义为正则表达式fs。

因此,在您的情况下,字段分隔符是逗号-F,

引号中的内容是你想要awk解释的内容,它表示匹配带有模式NR==1的行,NR是特殊的,它是记录号,所以你希望它匹配第一条记录,接下来是你希望awk在该模式匹配时采取的操作{print $1},它表示打印该行的第一个字段(以逗号分隔)。

更好的方法是使用awk为您找到最大的记录,而不是先对其进行排序,这为您提供了一个与记录数量呈线性关系的解决方案 - 您只需要最大值,无需对整个文件进行额外的排序工作:

awk -F, 'BEGIN {max = 0} {if ($1>max) max=$1} END {print max}' student_records.txt

对于此和其他awk“一个内衬”,请查看here