Bash 如何获取一行中某部分的字数
文件的行是这样的Bash 如何获取一行中某部分的字数,bash,awk,Bash,Awk,文件的行是这样的 <some character> ||| each line. So far i can get the total number of lines and the text for each on its own line ||| <some text> | | |每行。到目前为止,我可以得到每行的总行数和文本| | | 现在我想计算| | |之间的单词数 我打算做的是 awk-F'| | |'{print$2}'word|u文件| wc-l 但它
<some character> ||| each line. So far i can get the total number of lines and the text for each on its own line ||| <some text>
| | |每行。到目前为止,我可以得到每行的总行数和文本| | |
现在我想计算| | |
之间的单词数
我打算做的是
awk-F'| | |'{print$2}'word|u文件| wc-l
但它在awk部分中抛出了空白,这表明它并没有按照我想要的方式使用| | |
(作为分隔符),有趣的是,如果我使用$1
而不是$2
,它会打印整个文本
但是,如果我使用| |
(即前后的空格
),它会提供一些输出,但不会将两个delimeter之间的句子视为一个字段,即如果我使用以下内容,它会打印每个
,而不是整个句子
awk-F'| |''{print$2}'word_文件
如何使用bash命令实现这一点
供参考
awk版本-GNU awk 4.0.1
awk的-F
选项,该选项设置输入字段分隔符FS
,需要一个正则表达式作为其值
因此,要将| |
解释为文字,必须对\
字符进行转义,这些字符是正则表达式上下文中的元字符
鉴于Awk还接受基于字符串文本的转义序列,您必须将\
实例加倍:awk-F'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
要正确计算字段2中的单词(定义为空格分隔的标记),可以尝试以下方法:
awk -F '\\|\\|\\|' 'BEGIN { orgFs=FS } { FS=" "; $0 = $2; print NF; FS=orgFS }' word_file
这将按文本| | |
将每个输入行拆分为字段
通过将FS
临时设置为一个空格(这是一个神奇的值,告诉Awk通过任何非空的空格将字段拆分为多个字段),我们可以将字段2的值$2
分配给整个输入行$0
,从而使$0
的新值再次拆分为多个字段
此时,NF
反映了最初第二个字段中的字段数,即单词数,我们可以打印出来
将FS
还原为其原始值,然后准备解析下一个输入行。使用gawk
多字符支持,这可能会更容易
$ awk -v RS="\\\|\\\|\\\|" 'NR==2{print NF}' file
或者,如果不知道如何逃离管道,也许用清洁剂
$ awk -v RS='[|]{3}' ...