读取参数并从中创建临时文件以在脚本中使用

读取参数并从中创建临时文件以在脚本中使用

我正在尝试编写一个脚本来计算文件中的列数。但是,我不知道该文件的名称是什么。我正在尝试创建一个名为 tempfile 的文件,其中包含来自参数的信息。

这是迄今为止我为名为“columnCounter”的脚本编写的脚本:

#!/bin/bash
read colNumber
count=0
for i in $colNumber
do
     count=`expr $count + 1'
done
echo "column number: $count"

只要我有一个包含信息的文件名并按以下格式将其输入终端,上面的代码就可以工作:列计数器。

我尝试添加以下代码的两行,以从终端中的参数创建一个临时文件,然后 cat 该临时文件并将其通过管道传输到 columnCounter。但这是行不通的。

cat $1 > tempfile
cat tempfile | columnCounter

答案1

为了将您的文件名作为参数提供给您需要使用的脚本位置参数

您可以使用以下脚本来完成此操作:

#!/bin/bash

awk '{ print NF; exit }' "$1"

这假设您只关心第一行中的列数。


如果你想找到列数最多的行,你可以这样做:

#!/bin/bash

awk 'NF > max { max = NF } END { print max }' "$1"

这将检查文件中所有行的长度并打印最长的行


现在,如果您想指定分隔符,可以使用多个位置参数:

#!/bin/bash

delim=$1
file=$2

awk -F "$delim" 'NF > max { max = NF } END { print max }' "$file"

这将允许您计算各种文件(例如 csv)中的最大列大小:

./columnCounter , tempfile.csv

为了变得更奇特,我们可以使用getopts解析参数:

#!/bin/bash

while getopts d:f: opt; do
    case $opt in
        d)  delim=$OPTARG;;
        f)  file=$OPTARG;;
    esac
done

awk -F "$delim" 'NF > max { max = NF } END { print max }' "$file"

这将被称为:

./columCounter -d , -f tempfile.csv

相关内容