如何在AWK中不使用默认字段分隔符

时间:2018-04-12 15:12:50

标签: awk

我有一个这样的字符串:

public interface MyInterface {

}
public class Test implements MyInterface{
    public static void main(String[] args) {
        MyInterface object  = new MyInterface(); // Error Here "Cannot instantiate the type MyInterface" Its a right Error ...!
    }

我希望使用awk将此字符串与tony x25 xdata engineer Xhome x分开,

X

但结果是这样的:

awk '{FS="[xX]"} {for(i=1;i<=NF;i++) print $i}' 1

似乎仍然使用空格的默认字段分隔符,如何不使用默认字段分隔符但只使用字符tony x25 xdata engineer Xhome x

2 个答案:

答案 0 :(得分:4)

将您的代码更改为:

return

 awk 'BEGIN{FS="[xX]"} {for.....

一些细节:

如果你没有将 awk -F"[xX]" '{for(.... 放在FS块中,当awk获得第一行时,会使用默认的BEGIN,这就是你在问题中得到输出的原因。但是,在第一行之后,FSFS设置,即从文件的第二行开始,字段将由[Xx]分隔。不幸的是,您的输入示例只有一行。您可以添加更多行进行测试。

答案 1 :(得分:1)

您应该使用记录分隔符RS而不是字段separotor FS

$ awk -v RS='[Xx]' 1 <<< "tony x25 xdata engineer Xhome"
tony
25
data engineer
home

RS设置为正则表达式[Xx]可以将字符串切成碎片。使用输出记录分隔符ORS打印这些分隔符,默认设置为\n