在awk中的反斜杠(“\”)分隔符上拆分字符串?

时间:2012-04-12 20:05:44

标签: unix awk

我正在尝试根据某些分隔符将文件中的字符串拆分。但是我无法正确实现...以下是我的代码。

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

以下是我的示例数据人员。

Col1 Col2
abc  123\abc
abcd 123\abcd

欲望输出:

Col1 Col2
abc  abc
abcd abcd

5 个答案:

答案 0 :(得分:3)

您无需拨打电话。只需使用\\作为字段分隔符:

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

<强>输出:

a,b,c,d

答案 1 :(得分: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。我不认为你在文件中需要它,但如果这对文件不起作用,那么尝试根据需要为数据添加额外的'\'。我尝试了几种如何使用'\'的变体,这似乎是最直接的。欢迎其他人发表评论!

我希望这会有所帮助。

答案 2 :(得分:0)

正如上面提到的一些评论,你有嵌套的单引号。切换一组使用双引号应该修复它。

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

我更喜欢使用split来管道另一个awk命令。我不知道一个比另一个更好,它只是一个偏好。

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

答案 3 :(得分:0)

你需要逃避你试图拆分的反斜杠。您可以使用如下双引号在split "\\"执行此操作:awk 'NR==1 { print } NR>=2 { split($0,array,"\\"); print $1,array[2] }' file1.dat

此外,您可以使用数组切片使代码更具可读性(并避免定义另一个var)。这应该适合你:

{{1}}

HTH

答案 4 :(得分:0)

/ebs_vol/nodes/0/indices