如何获取分隔字符串中的字段数?

Doe*_*nDo 9 bash shell cut

鉴于以下数据:

 field1;field2;field3;field4;
Run Code Online (Sandbox Code Playgroud)

如何获取此字符串中的字段数?例如,对于这种情况,命令应该返回4.

实际上,我在每一行中都没有相同数量的内容,但无论如何我都需要将它们全部归还.一旦我设法计算了字段的数量,我还将设法制作一个循环来获取所有字段.

dev*_*ull 15

你可以说:

$ echo "field1;field2;field3;field4;" | grep -o ";" | wc -l
4
Run Code Online (Sandbox Code Playgroud)

或者,

$ tr -dc ';' <<< "field1;field2;field3;field4;" | wc -c
4
Run Code Online (Sandbox Code Playgroud)

编辑:为了遍历字段,您可以说:

$ IFS=';' read -ra field <<< "field1;field2;field3;field4;"
$ for i in "${field[@]}"; do echo $i; done
field1
field2
field3
field4
Run Code Online (Sandbox Code Playgroud)


小智 13

使用cut不是推荐的命令,因为它可以使用awk在一行中完成.

例如

data='field1;field2;field3;field4;'
echo $data|awk -F';' '{print NF}'
Run Code Online (Sandbox Code Playgroud)

实际上上面将返回5,因为在给定的数据中最后有"分号",因此linux awk假定最后一个字段为空.

但是如果预计会有这样的话,那么你可以使用下面的命令减去1.

echo $data|awk -F';' '{print NF-1}'
Run Code Online (Sandbox Code Playgroud)

说明:awk中的-F选项用于分隔符,在这种情况下,它是分号(用单引号括起来)NF表示字段数.


Ale*_*-A. 6

纯粹的bash解决方案:

myStr='field1;field2;field3;field4;'
x="${myStr//[^;]}"                   # remove everything but the delimiter ';'
echo "${#x}"                         # get the length - outputs 4
Run Code Online (Sandbox Code Playgroud)