首页 > 解决方案 > 用 bash 计算列数

问题描述

我需要找到一种方法来计算文件或标准输入中的列,而不使用bash 之外的任何东西。我目前所拥有的...

input="${1:-/dev/stdin}"
rows=0
while read -r myLine
do
    a=($myLine)
    cols=(${#a[*]})
    rows=`expr $rows + 1`
done < $input

echo -e "$rows $cols"

我正在计算行和列。现在,我的列数仅适用于文件,不适用于标准输入。

有什么建议吗?

我正在运行以下命令

echo -e "1\t2\n3\t4" > m1, ./matrix m1
echo -e "1\t2\n3\t4" | matrix

标签: bash

解决方案


我会建议 awk 完成这项任务,但如果你需要 bash,你可以使用数组:

let c=0
while read -r myLine; do 
  a=($myLine) 
  echo "Line $((++c)) has ${#a[*]} columns"
done < file

该数组由函数a读取的行的内容填充。read列数就是数组的长度a

请注意,此脚本假定未设置输入字段分隔符IFS(因此默认<space><tab><newline>为该read命令)。


推荐阅读