我正在尝试根据某些分隔符将文件中的字符串拆分。但是我无法正确实现...以下是我的代码。
awk 'var=split($2,arr,'\'); {print $var}' file1.dat
以下是我的示例数据人员。
Col1 Col2
abc 123\abc
abcd 123\abcd
欲望输出:
Col1 Col2
abc abc
abcd abcd
答案 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