如何将awk分隔符设置为字符串或字符?

问题描述:

如何使用一个string和另一个character作为awk中的同时分隔符?如何将awk分隔符设置为字符串或字符?

[email protected]:~/AMD_C/SO$ echo "111:222text333:444" | awk -F ':' '{print $2}' 
222text333 

[email protected]:~/AMD_C/SO$ echo "111:222text333:444" | awk -F "text" '{print $2}' 
333:444 

因此问题是,我们如何使用“text”和“:”作为分隔符的同时,使{print $2}将打印222作为输出?考虑上面的例子中的输入。

您可以使用简单的交替

$ echo "111:222text333:444" | awk -F "text|:" '{print $2}' 
222 

它能做什么

  • -F "text|:"将字段设置分隔符为text:

测试

为了确保此正确界定领域

$echo "111:222text333:444" | awk -F "text|:" '{print $1,$2,$3,$4}' 
111 222 333 444 

编辑

如果你想使用|作为delimitter,逃避|作为

$ echo "111:222text333:444|hello" | awk -F '\\||text|:' '{print $1,$2,$3,$4,$5}' 
111 222 333 444 hello 
+1

谢谢! 1怀疑,如果我需要'|'还有一个字符作为分隔符? – 2014-11-25 14:57:10

+0

例如:echo“111 | 222text333 | 444”| awk -F“text | \ |” '{print $ 3}' awk:warning:转义序列'\ |'视为普通的'|' – 2014-11-25 15:00:38

+0

@ A.M.D好问题。退出'|'并确保将整个事情用单引号括起来。我编辑了答案。希望它有助于:) – nu11p01n73R 2014-11-25 15:01:39