2016-12-01 44 views
2

這些文件的行是這樣的。如何獲得一部分線的字數

<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_file | wc -l

,但它在awk的部分,這表明它沒有采取|||,因爲我想(這是作爲分隔符)拋出空白,有趣的是,如果我使用$1代替$2,它打印整個文本

但是,如果我用|||(即前後space)它給了我一些輸出,但不當作一個場中的兩個定界符之間的那句話,我.E它打印each,而不是整個句子,如果我使用下面的

awk -F ' ||| ' '{print $2}' word_file

如何實現這一目標使用bash命令

FYI awk version -GNU Awk 4.0.1

回答

1

awk的-F選項,這臺輸入字段分隔符FS需要正則表達式作爲其值。

因此,對於|||被解釋爲一個字面,必須\ -escape的|字符,這是在一個正則表達式的上下文元字符。

鑑於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恢復到其原始值,準備解析下一個輸入行。

0

gawk多焦RS的支持,這可能是更容易

$ awk -v RS="\\\|\\\|\\\|" 'NR==2{print NF}' file 

,或者不知道如何與

$ awk -v RS='[|]{3}' ... 
逃生管道,或許更清潔
相關問題