Bash 理解awk(Shell脚本)中的拆分函数:

Bash 理解awk(Shell脚本)中的拆分函数:,bash,shell,awk,Bash,Shell,Awk,所以,我尝试使用split选项打印第一个字段和第二个字段。分隔符位于选项卡上方。我知道还有很多其他的方法,但我正在努力学习awk中的分割函数。我正在尝试以下代码: RequestID CustomerID Status 101 101111 Error 102 323232 Success 103 33434 Error 上面的代码只打印第一列($1),而不打印第列($2)。有什么具体原因吗 谢谢,它正在打印a[1],这是整个第一个字段,b

所以,我尝试使用split选项打印第一个字段和第二个字段。分隔符位于选项卡上方。我知道还有很多其他的方法,但我正在努力学习awk中的分割函数。我正在尝试以下代码:

RequestID       CustomerID      Status
101     101111  Error
102     323232  Success
103     33434   Error
上面的代码只打印第一列($1),而不打印第列($2)。有什么具体原因吗


谢谢,

它正在打印
a[1]
,这是整个第一个字段,
b[2]
,这是空的,因为您正在拆分整个第二个字段,例如选项卡上的“101111”,它将是一个包含一个元素的数组

除非更改字段分隔符,否则awk会将输入行拆分为空白字段,因此在选项卡上拆分是多余的。您可以只
打印$1,$2
。如果您真的想看到split函数正在运行,请尝试除空格以外的其他方法:

awk '{split($1,a,"\t");split($2,b,"\t");print a[1], b[2]}' data
awk'{split($1,a,“0”);打印一个[1],一个[2];}'
它正在打印
a[1]
,这是整个第一个字段,
b[2]
,这是空的,因为您正在拆分整个第二个字段,例如选项卡上的“101111”,它将是一个包含一个元素的数组

除非更改字段分隔符,否则awk会将输入行拆分为空白字段,因此在选项卡上拆分是多余的。您可以只
打印$1,$2
。如果您真的想看到split函数正在运行,请尝试除空格以外的其他方法:

awk '{split($1,a,"\t");split($2,b,"\t");print a[1], b[2]}' data
awk'{split($1,a,“0”);打印一个[1],一个[2];}'
它正在打印
a[1]
,这是整个第一个字段,
b[2]
,这是空的,因为您正在拆分整个第二个字段,例如选项卡上的“101111”,它将是一个包含一个元素的数组

除非更改字段分隔符,否则awk会将输入行拆分为空白字段,因此在选项卡上拆分是多余的。您可以只
打印$1,$2
。如果您真的想看到split函数正在运行,请尝试除空格以外的其他方法:

awk '{split($1,a,"\t");split($2,b,"\t");print a[1], b[2]}' data
awk'{split($1,a,“0”);打印一个[1],一个[2];}'
它正在打印
a[1]
,这是整个第一个字段,
b[2]
,这是空的,因为您正在拆分整个第二个字段,例如选项卡上的“101111”,它将是一个包含一个元素的数组

除非更改字段分隔符,否则awk会将输入行拆分为空白字段,因此在选项卡上拆分是多余的。您可以只
打印$1,$2
。如果您真的想看到split函数正在运行,请尝试除空格以外的其他方法:

awk '{split($1,a,"\t");split($2,b,"\t");print a[1], b[2]}' data
awk'{split($1,a,“0”);打印一个[1],一个[2];}'
拆分功能就是这样工作的:

awk '{split($1, a, "0"); print a[1], a[2];}' < input
1 1
1 2
1 3

函数采用字符串(在您的情况下应为整行,即
$0
),后跟数组名,在本例中为
a
。最后是分隔符,默认情况下,如果未提供该分隔符,则为空格(在您的示例中为
“\t”

拆分功能就是这样工作的:

awk '{split($1, a, "0"); print a[1], a[2];}' < input
1 1
1 2
1 3

函数采用字符串(在您的情况下应为整行,即
$0
),后跟数组名,在本例中为
a
。最后是分隔符,默认情况下,如果未提供该分隔符,则为空格(在您的示例中为
“\t”

拆分功能就是这样工作的:

awk '{split($1, a, "0"); print a[1], a[2];}' < input
1 1
1 2
1 3

函数采用字符串(在您的情况下应为整行,即
$0
),后跟数组名,在本例中为
a
。最后是分隔符,默认情况下,如果未提供该分隔符,则为空格(在您的示例中为
“\t”

拆分功能就是这样工作的:

awk '{split($1, a, "0"); print a[1], a[2];}' < input
1 1
1 2
1 3

函数采用字符串(在您的情况下应为整行,即
$0
),后跟数组名,在本例中为
a
。最后是分隔符,默认情况下,如果未提供该分隔符,则为空格(在您的示例中为
“\t”

在awk中,默认字段分隔符是空白,下面是
空白
定义:

$ cat file
RequestID       CustomerID      Status
101     101111  Error
102     323232  Success
103     33433   Error

$ awk '{split($0,a,"\t"); print a[1],a[2]}' file
RequestID CustomerID
101 101111
102 323232
103 33433
因此,在您的代码中,当您使用$1和$2时,您已经使用默认字段分隔符(空白)拆分了行。如果您需要尝试拆分功能,您需要$0(整行)上的目标,其他人已经提供了解决方案,我无需再次编写

在您的情况下,有一个技巧是,在拆分函数中使用
FS
作为fieldsep,这样您就不必关心是否有空格、多个空格、制表符或其他混合空格,例如:

Fields are normally separated by whitespace sequences (spaces, TABs, and newlines), not by single spaces.

在awk中,默认的字段分隔符是空白,下面是
空白
定义:

$ cat file
RequestID       CustomerID      Status
101     101111  Error
102     323232  Success
103     33433   Error

$ awk '{split($0,a,"\t"); print a[1],a[2]}' file
RequestID CustomerID
101 101111
102 323232
103 33433
因此,在您的代码中,当您使用$1和$2时,您已经使用默认字段分隔符(空白)拆分了行。如果您需要尝试拆分功能,您需要$0(整行)上的目标,其他人已经提供了解决方案,我无需再次编写

在您的情况下,有一个技巧是,在拆分函数中使用
FS
作为fieldsep,这样您就不必关心是否有空格、多个空格、制表符或其他混合空格,例如:

Fields are normally separated by whitespace sequences (spaces, TABs, and newlines), not by single spaces.

在awk中,默认的字段分隔符是空白,下面是
空白
定义:

$ cat file
RequestID       CustomerID      Status
101     101111  Error
102     323232  Success
103     33433   Error

$ awk '{split($0,a,"\t"); print a[1],a[2]}' file
RequestID CustomerID
101 101111
102 323232
103 33433
因此,在您的代码中,当您使用$1和$2时,您已经使用默认字段分隔符(空白)拆分了行。如果您需要尝试拆分功能,您需要$0(整行)上的目标,其他人已经提供了解决方案,我无需再次编写

在您的情况下,有一个技巧是,在拆分函数中使用
FS
作为fieldsep,这样您就不必关心是否有空格、多个空格、制表符或其他混合空格,例如:

Fields are normally separated by whitespace sequences (spaces, TABs, and newlines), not by single spaces.

在awk中,默认的字段分隔符是空白,下面是
空白
定义:

$ cat file
RequestID       CustomerID      Status
101     101111  Error
102     323232  Success
103     33433   Error

$ awk '{split($0,a,"\t"); print a[1],a[2]}' file
RequestID CustomerID
101 101111
102 323232
103 33433
因此,在您的代码中,当您使用$1和$2时,您已经使用默认字段分隔符(空白)拆分了行。如果需要尝试拆分函数,则需要target