2014-12-09 87 views
1

我有一个非常大的文件,其中有由|^特殊字符分隔的列。分隔符的特殊字符组合计数

要注意的一个重要的事情是,我是一个AIX服务器上

的数据的一个例子是:

name|^surname|^age|^city|^country 
john|^doe|^15|^chicago|^usa 
george|^reese|^14|^london|^england 

搜索互联网,我发现最好的事情后,以下

cat TEST_FILE.DAT | awk -F"\|\^" '{ print NF }' 

然而,这总是返回1,因为它不能识别2字符1字符串

下面的命令返回分隔符的正确数目,但我想用|^相结合,做到这一点作为分隔符

cat TEST_FILE.DAT | awk -F"|" '{ print NF }' 

回答

0

使用的\\代替\为我工作。不确定为什么。可能与如何在bash,awk和awk的正则表达式引擎中解释转义字符有关,但我无法给出一个很好的解释。

$ cat test 
name | ^surname| ^age | ^city | ^country 
john | ^doe | ^15 | ^chicago | ^usa 
george | ^reese | ^14 | ^london | ^england 

$ cat test |awk -F'\\| \\^' '{for(i=1;i<=NF;i++){if($i)print $i}}' 
name 
surname 
age 
city  
country 
john 
doe  
15 
chicago 
usa 
george 
reese 
14 
london 
england 

顺便说一下,重要的是使用单引号-F。该行还工作,但它的丑陋:

cat test |awk -F"\\\\| \\\\^" '{for(i=1;i<=NF;i++){if($i)print $i}}' 
+0

我确认这通过以下方式'猫TEST_FILE.DAT为我工作| awk -F'\\ | \\ ^''{print NF}'非常感谢你! – yian 2014-12-10 11:07:03

0

试试这个:

awk -F'[|]\\^' '{print NF}' file 

awk -F'[|][\\^]' '{print NF}' file