鉴于以下数据:
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表示字段数.
纯粹的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)