我想分割一个文件中的字符串基于一些分隔符。但我无法实现它正确...这是我的代码如下。将字符串拆分为awk中的反斜杠(“”)分隔符?
awk 'var=split($2,arr,'\'); {print $var}' file1.dat
这是我的样本数据家伙。
Col1 Col2
abc 123\abc
abcd 123\abcd
欲望输出:
Col1 Col2
abc abc
abcd abcd
我想分割一个文件中的字符串基于一些分隔符。但我无法实现它正确...这是我的代码如下。将字符串拆分为awk中的反斜杠(“”)分隔符?
awk 'var=split($2,arr,'\'); {print $var}' file1.dat
这是我的样本数据家伙。
Col1 Col2
abc 123\abc
abcd 123\abcd
欲望输出:
Col1 Col2
abc abc
abcd abcd
样本数据和输出是我最好的猜测在您的要求
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来处理。我不认为你需要在一个文件中,但如果这不适用于一个文件,然后尝试根据需要添加额外的'\'到您的数据。我尝试了一些关于如何使用'\'的变体,这似乎是最直接的。其他人欢迎发表评论!
我希望这会有所帮助。
是的,即使awk脚本是在单独的文件中提供的,而不是提供的,您仍然需要转义'\'在命令行上。 – dubiousjim 2012-04-19 12:46:57
您不需要调用拆分。只要使用\\
作为字段分隔符:
echo 'a\b\c\d' | awk -F\\ '{printf("%s,%s,%s,%s\n", $1, $2, $3, $4)}'
OUTPUT:
a,b,c,d
由于部分提到的意见,你有嵌套单引号。切换一组使用双引号应该修复它。
awk 'var=split($2,arr,"\"); {print $var}' file1.dat
我宁愿管道到另一个awk命令使用split.I不知道,一个比其他更好的,它只是一个偏好。
awk '{print $2}' file1.dat | awk -F'\' '{...}'
您需要转义您要分割的反斜杠。你可以用split
这样的双引号来做到这一点:"\\"
另外,你可以采用数组切片来使你的代码更具可读性(并避免定义另一个var)。这应该为你工作:
awk 'NR==1 { print } NR>=2 { split($0,array,"\\"); print $1,array[2] }' file1.dat
HTH
awk '{sub(/123\\/,"")}1' file
Col1 Col2
abc abc
abcd abcd
你的报价被打破,在彩色高亮密切关注。 – 2012-04-12 20:06:57
仍然无法找到它... – Teja 2012-04-12 20:14:01
您不能在单引号内嵌套单引号。 – 2012-04-12 20:17:13