计数分隔符的特殊字符组合的数量

时间:2014-12-09 13:23:02

标签: awk special-characters aix records

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

需要注意的一件重要事情是我在 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 }'

2 个答案:

答案 0 :(得分: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}}'

答案 1 :(得分:0)

试试这个:

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

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