如何在 awk 中用 \s 设置不同的分隔符?
How to set different separator with \s in awk?
text(1后为空白(space \t\f\v)):
1 23.4,56
我想要打印 $3 的结果是 4。
但是 运行
echo "1 23.4,56" | awk -F'[\s+|,|.]' '{print }'
, 结果是 56
能否请您尝试以下。使用 GNU awk
.
中显示的示例编写和测试
echo "1 23.4,56" | awk -F'[.,]' '{print }'
或者根据您的意见,您希望在字段分隔符中 space 然后尝试以下,我们需要在此处使用 [[:space:]]
。
echo "1 23.4,56" | awk -F'[[:space:]]+|[.,]+' '{print }'
或
echo "1 23.4,56" | awk -F'[:.,[:space:]]+' '{print }'
要查看字段编号和字段值如何,运行 如下;出于理解目的(对于第一个解决方案)。
echo "1 23.4,56" | awk -F'[.,]' '{for(i=1;i<=NF;i++){print "Field number:"i,"Field value:"$i}}'
Field number:1 Field value:1 23
Field number:2 Field value:4
Field number:3 Field value:56
你只需要调整你的FS。有几种可能,这是一种方式:
$ echo "1 23.4,56" | awk -F'[ ,.]*' '{print }'
1
$ echo "1 23.4,56" | awk -F'[ ,.]*' '{print }'
23
$ echo "1 23.4,56" | awk -F'[ ,.]*' '{print }'
4
$ echo "1 23.4,56" | awk -F'[ ,.]*' '{print }'
56
另一种方式:
$ echo "1 23.4,56" | awk -F'[,.]|\s+' '{print }'
4
另一种方式,这次是区域设置感知:
$ echo "1 23.4,56" | awk -F'[,.]|[[:space:]]+' '{print }'
4
$ echo "1 23.4,56" | awk -F'[[:space:],.]+' '{print }'
4
使用 GNU awk
,而不是使用 FS,您可以使用 FPAT:
$ echo "1 23.4,56" | awk 'BEGIN { FPAT="[^ .,]+" } { print }'
4
FPAT的值应该是一个字符串,它提供了描述每个字段内容的正则表达式。更多信息请访问:https://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html
I want result of print is 4.
FS的一些改动,你的代码可以搞定:
echo "1 23.4,56" | awk -F'[,.]|[[:blank:]]+' '{print }'
4
text(1后为空白(space \t\f\v)):
1 23.4,56
我想要打印 $3 的结果是 4。
但是 运行
echo "1 23.4,56" | awk -F'[\s+|,|.]' '{print }'
, 结果是 56
能否请您尝试以下。使用 GNU awk
.
echo "1 23.4,56" | awk -F'[.,]' '{print }'
或者根据您的意见,您希望在字段分隔符中 space 然后尝试以下,我们需要在此处使用 [[:space:]]
。
echo "1 23.4,56" | awk -F'[[:space:]]+|[.,]+' '{print }'
或
echo "1 23.4,56" | awk -F'[:.,[:space:]]+' '{print }'
要查看字段编号和字段值如何,运行 如下;出于理解目的(对于第一个解决方案)。
echo "1 23.4,56" | awk -F'[.,]' '{for(i=1;i<=NF;i++){print "Field number:"i,"Field value:"$i}}'
Field number:1 Field value:1 23
Field number:2 Field value:4
Field number:3 Field value:56
你只需要调整你的FS。有几种可能,这是一种方式:
$ echo "1 23.4,56" | awk -F'[ ,.]*' '{print }'
1
$ echo "1 23.4,56" | awk -F'[ ,.]*' '{print }'
23
$ echo "1 23.4,56" | awk -F'[ ,.]*' '{print }'
4
$ echo "1 23.4,56" | awk -F'[ ,.]*' '{print }'
56
另一种方式:
$ echo "1 23.4,56" | awk -F'[,.]|\s+' '{print }'
4
另一种方式,这次是区域设置感知:
$ echo "1 23.4,56" | awk -F'[,.]|[[:space:]]+' '{print }'
4
$ echo "1 23.4,56" | awk -F'[[:space:],.]+' '{print }'
4
使用 GNU awk
,而不是使用 FS,您可以使用 FPAT:
$ echo "1 23.4,56" | awk 'BEGIN { FPAT="[^ .,]+" } { print }'
4
FPAT的值应该是一个字符串,它提供了描述每个字段内容的正则表达式。更多信息请访问:https://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html
I want result of print is 4.
FS的一些改动,你的代码可以搞定:
echo "1 23.4,56" | awk -F'[,.]|[[:blank:]]+' '{print }'
4