我正在尝试根据某些分隔符将字符串拆分到文件中。但我无法正确实现它...这是我的代码如下。
awk 'var=split($2,arr,'\'); {print $var}' file1.dat
这是我的样本数据家伙。
Col1 Col2
abc 123\abc
abcd 123\abcd
期望输出:
Col1 Col2
abc abc
abcd abcd
您不需要调用拆分。只需\\
用作字段分隔符:
echo 'a\b\c\d' | awk -F\\ '{printf("%s,%s,%s,%s\n", $1, $2, $3, $4)}'
输出:
a,b,c,d
样本数据和输出是我对您要求的最佳猜测
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 个。我认为您不需要在文件中使用它,但如果这不适用于文件,请尝试根据需要向数据中添加额外的“\”。我尝试了几种关于如何使用“\”的变体,这似乎是最直接的。欢迎其他人发表评论!
我希望这有帮助。
您需要转义要拆分的反斜杠。您可以split
使用这样的双引号来执行此操作:"\\"
此外,您可以采用数组切片来使您的代码更具可读性(并避免定义另一个 var)。这应该适合你:
awk 'NR==1 { print } NR>=2 { split($0,array,"\\"); print $1,array[2] }' file1.dat
高温高压
正如提到的一些评论,您嵌套了单引号。切换一组使用双引号应该可以解决它。
awk 'var=split($2,arr,"\"); {print $var}' file1.dat
我宁愿通过管道连接到另一个 awk 命令而不是使用 split。我不知道一个比另一个更好,这只是一种偏好。
awk '{print $2}' file1.dat | awk -F'\' '{...}'
awk '{sub(/123\\/,"")}1' file
Col1 Col2
abc abc
abcd abcd