13

次のデータがあるとします。

 field1;field2;field3;field4;

この文字列のフィールド数を取得するには? たとえば、この場合、コマンドは4を返す必要があります。

実際には、各行に同じ数のコンテンツがあるわけではありませんが、とにかくすべてを返す必要があります。フィールドの数を数えることができたら、ループを作成してすべてを取得することもできます。

4

5 に答える 5

7

純粋な bash ソリューション:

myStr='field1;field2;field3;field4;'
x="${myStr//[^;]}"                   # remove everything but the delimiter ';'
echo "${#x}"                         # get the length - outputs 4
于 2013-08-21T07:46:45.003 に答える
1

私が提供したオプションは、バグや操作なしで引き続き使用できます。

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

これが理にかなっていることを願っています。

于 2014-05-24T05:39:03.313 に答える
-1
#!/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
于 2016-03-18T17:51:59.543 に答える