2012-04-12 421 views
1

我想分割一個文件中的字符串基於一些分隔符。但我無法實現它正確...這是我的代碼如下。將字符串拆分爲awk中的反斜槓(「」)分隔符?

awk 'var=split($2,arr,'\'); {print $var}' file1.dat 

這是我的樣本數據傢伙。

Col1 Col2 
abc 123\abc 
abcd 123\abcd 

慾望輸出:

Col1 Col2 
abc abc 
abcd abcd 
+3

你的報價被打破,在彩色高亮密切關注。 – 2012-04-12 20:06:57

+0

仍然無法找到它... – Teja 2012-04-12 20:14:01

+1

您不能在單引號內嵌套單引號。 – 2012-04-12 20:17:13

回答

1

樣本數據和輸出是我最好的猜測在您的要求

echo '1:2\\a\\b:3' | awk -F: '{ 
    n=split($2,arr,"\\") 
    # print "#dbg:n=" n 
    var=arr[3] 
    print var 
    }' 

輸出

b 

建議所有split返回它發現分割的字段數。您可以取消註釋調試行,您將看到返回值3。

還要注意,對於我的測試,我必須使用2'\'字符1來處理。我不認爲你需要在一個文件中,但如果這不適用於一個文件,然後嘗試根據需要添加額外的'\'到您的數據。我嘗試了一些關於如何使用'\'的變體,這似乎是最直接的。其他人歡迎發表評論!

我希望這會有所幫助。

+0

是的,即使awk腳本是在單獨的文件中提供的,而不是提供的,您仍然需要轉義'\'在命令行上。 – dubiousjim 2012-04-19 12:46:57

3

您不需要調用拆分。只要使用\\作爲字段分隔符:

echo 'a\b\c\d' | awk -F\\ '{printf("%s,%s,%s,%s\n", $1, $2, $3, $4)}' 

OUTPUT:

a,b,c,d 
+0

'echo'a \ b \ c \ d'| awk -F'\''{printf(「%s,%s,%s,%s \ n」,$ 1,$ 2,$ 3,$ 4)}''也可以。 – gpojd 2012-04-12 20:44:12

+0

@gpojd:是的,這是一個很好的觀點。 – anubhava 2012-04-12 20:46:09

+0

我執行了你的awk腳本,但它不工作......我得到,d ,,作爲輸出。 – Teja 2012-04-12 21:17:18

0

由於部分提到的意見,你有嵌套單引號。切換一組使用雙引號應該修復它。

awk 'var=split($2,arr,"\"); {print $var}' file1.dat 

我寧願管道到另一個awk命令使用split.I不知道,一個比其他更好的,它只是一個偏好。

awk '{print $2}' file1.dat | awk -F'\' '{...}' 
0

您需要轉義您要分割的反斜槓。你可以用split這樣的雙引號來做到這一點:"\\"

另外,你可以採用數組切片來使你的代碼更具可讀性(並避免定義另一個var)。這應該爲你工作:

awk 'NR==1 { print } NR>=2 { split($0,array,"\\"); print $1,array[2] }' file1.dat

HTH

0
awk '{sub(/123\\/,"")}1' file 

Col1 Col2 
abc abc 
abcd abcd