2014-12-09 82 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