我是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
有什么想法吗?另外,有关如何以最佳方式完成此任务的任何建议?
提前谢谢你。
答案 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。