パラメータを読み取り、スクリプトに使用する一時ファイルを生成します。

パラメータを読み取り、スクリプトに使用する一時ファイルを生成します。

ファイルの列数を数えるスクリプトを作成しようとしています。ところでファイル名が何なのかわかりませんね。パラメータの情報を含むtempfileというファイルを作成しようとしています。

以下は、「columnCounter」というスクリプトに対してこれまでに作成したスクリプトです。

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

上記のコードは、情報を含むファイル名があり、それを端末に次の形式で入力する限り機能します。列カウンタ。

ターミナルのパラメータから一時ファイルを生成するために、次の2行のコードを追加してから一時ファイルをキャットし、それを列カウンタにパイプしてみました。しかし、これはうまくいきません。

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

関連情報