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