次のデータがあるとします。
field1;field2;field3;field4;
この文字列のフィールド数を取得するには? たとえば、この場合、コマンドは4を返す必要があります。
実際には、各行に同じ数のコンテンツがあるわけではありませんが、とにかくすべてを返す必要があります。フィールドの数を数えることができたら、ループを作成してすべてを取得することもできます。
純粋な bash ソリューション:
myStr='field1;field2;field3;field4;'
x="${myStr//[^;]}" # remove everything but the delimiter ';'
echo "${#x}" # get the length - outputs 4
私が提供したオプションは、バグや操作なしで引き続き使用できます。
j=0
i=1
while [ "$j" ]
do
j="$(cat dataFile.txt | cut -d[delimiter] -f$i)"
i="$(($i+1))"
done
echo "$(($i-2))"
結果を保持する変数を初期化$j
し、結果が存在する限り、ループは各実行をカウントします。私の声明cut
を説明しながら、常にフィールドを2つ通過するまで実行します。$(($i-2))
データファイルの区切り文字を cut -d の後に入れます。フィールドを区切るためにカンマを使用したので、実際のコードは次のとおりです: cut -d, -f$i
これが理にかなっていることを願っています。
#!/bin/bash
DATA="field1;field2;field3;field4;"
# save IFS
OLDIFS=$IFS
# set new IFS
IFS=";"
# set DATA as position parameters
set -- ${DATA//\*/\\*}
# simply get parameter count
echo "Fields: $#"
# restore IFS
IFS=$OLDIFS