2012-04-12 161 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 
相关问题