我有一个非常大的文件,其中的列由|^
特殊字符分隔。
需要注意的一件重要事情是我在 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 :(得分: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