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

Awk 计数分隔符的特殊字符组合数,awk,special-characters,aix,records,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个字符串 下面的命

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

需要注意的一点是,我在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 }'
使用\\而不是\对我有效。不知道为什么。可能与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
试试这个:

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


我确认以下方式对我有效:cat TEST_FILE.DAT|awk-F'\\\\\\\\\^'{print NF}非常感谢!
awk  -F'[|]\\^' '{print NF}' file
awk  -F'[|][\\^]' '{print NF}' file