如何使用bash脚本查找文件中最长的行?
有人能看一下我的这个bash脚本吗?我试图用bash脚本查找文件中最长的行,所以我写了这个如何使用bash脚本查找文件中最长的行?,bash,Bash,有人能看一下我的这个bash脚本吗?我试图用bash脚本查找文件中最长的行,所以我写了这个 #!/bin/bash #Francesco Foschi length of a row in a file let n=0 let max_length=0 while read row do length=$(echo -n $row | wc -c) if[ ${#length} -gt ${#max_length} ] then let ma
#!/bin/bash
#Francesco Foschi length of a row in a file
let n=0
let max_length=0
while read row
do
length=$(echo -n $row | wc -c)
if[ ${#length} -gt ${#max_length} ]
then
let max_length=${#length}
fi
echo "$n row is $length charachters long"
echo "$row"
let n=n+1
done < $1
echo "longest line is $max_length charachters long"
exit 0
每次我尝试运行控制台时,控制台都会说在意外的then标记附近有语法错误。我做错了什么
顺便说一句,运行fedora28试试以下方法:
#!/bin/bash
#Francesco Foschi length of a row in a file
let n=0
let max_length=0
while read row
do
length=$(echo -n $row | wc -c)
if [ ${length} -gt ${max_length} ]
then
let max_length=${length}
fi
echo "$n row is $length charachters long"
echo "$row"
let n=n+1
done < $1
echo "longest line is $max_length charachters long"
exit 0
GNU wc内置了以下功能:
-L, --max-line-length
print the maximum display width
普通重击
#!/bin/bash
max=-1
while IFS= read -r line; do
[[ ${#line} -gt $max ]] && max=${#line}
done < "$1"
echo "longest line is $max chars long"
此文件的大小为10字节,不包括尾随换行符
用普通读取变量读取它
现在我们有8个字符0000010是八进制,但仍然缺少空格
添加IFS=变量赋值:
$ IFS= read -r line < file; printf %s "$line" | od -c
0000000 h \ b H e l l o
0000012
10个字符的八进制12:现在我们有了在$line中写入文件的内容
一直编写IFS=read-r行是一件痛苦的事情,但是bash给程序员带来了相当大的痛苦。您应该在if这个词后面加一个空格。我建议您检查代码的长度=${row}bash对于这个特定任务来说是一个极其缓慢和俗气的工具。您想研究在Awk中为任何真实场景重新实现脚本。我回滚了您的最新编辑。关于堆栈溢出的问题应严格保留为问题;将某件事标记为合适答案的方法就是简单地接受一个答案,就像你已经接受的那样。如果你想恢复它,它仍然包含所有的文本。我知道这一点,但我正在尝试完整的POSIX
$ read line < file; printf %s "$line" | od -c
0000000 h b H e l l o
0000007
$ read -r line < file; printf %s "$line" | od -c
0000000 h \ b H e l l o
0000010
$ IFS= read -r line < file; printf %s "$line" | od -c
0000000 h \ b H e l l o
0000012