3

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

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

这是我的样本数据家伙。

Col1 Col2
abc  123\abc
abcd 123\abcd

期望输出:

Col1 Col2
abc  abc
abcd abcd
4

5 回答 5

6

您不需要调用拆分。只需\\用作字段分隔符:

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

输出:

a,b,c,d
于 2012-04-12T20:23:15.980 回答
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 个。我认为您不需要在文件中使用它,但如果这不适用于文件,请尝试根据需要向数据中添加额外的“\”。我尝试了几种关于如何使用“\”的变体,这似乎是最直接的。欢迎其他人发表评论!

我希望这有帮助。

于 2012-04-12T20:15:47.437 回答
0

您需要转义要拆分的反斜杠。您可以split使用这样的双引号来执行此操作:"\\"

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

awk 'NR==1 { print } NR>=2 { split($0,array,"\\"); print $1,array[2] }' file1.dat

高温高压

于 2012-04-13T00:25:03.907 回答
0

正如提到的一些评论,您嵌套了单引号。切换一组使用双引号应该可以解决它。

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

我宁愿通过管道连接到另一个 awk 命令而不是使用 split。我不知道一个比另一个更好,这只是一种偏好。

awk '{print $2}' file1.dat | awk -F'\' '{...}'
于 2012-04-12T20:51:40.510 回答
0
awk '{sub(/123\\/,"")}1' file

Col1 Col2
abc  abc
abcd abcd
于 2017-06-13T00:14:44.323 回答