Bash脚本如何读取输入文件并输出行号不能被3整除的内容行
Bash脚本输出非3倍数行号内容的解决方法
报错原因
你使用的[ ]是Bash的test命令,不支持直接在内部执行算术运算。$line_number % 3 -ne 0会被解析为4个独立参数传入test命令,超出test的参数接收规则,因此抛出too many arguments错误。
修改后的可用脚本
将if判断替换为Bash专用的算术判断语法(( ))即可,修改后的完整脚本如下:
line_number=1 while read line do # 算术判断不需要加$引用变量,直接使用变量名即可 if (( line_number % 3 != 0 )) then echo "$line" fi (( line_number++ )) done
执行命令bash script.sh < input.txt即可得到正确结果,输出会自动跳过第3、6、9、12行的内容。
更简便的单行实现
也可以直接使用awk命令完成需求,无需编写脚本:
awk 'NR%3!=0' input.txt
其中NR为awk内置的当前行号变量,符合行号对3取余不等于0的行会被直接输出。
内容的提问来源于stack exchange,提问作者Isai Rivas
相关产品推荐
相关产品推荐

