awk 输出的第一行不是我所期望的

Ser*_*kiy 1 awk

我想弄清楚为什么文件名的一部分消失了。

就我而言,我创建了三个文件

$ ls
some-part-of-file.1  some-part-of-file.2  some-part-of-file.3
Run Code Online (Sandbox Code Playgroud)

当我使用 awk with 时FS = "-",其中一个是空白的。

$ ( echo some-part-of-file.1 ; echo some-part-of-file.2 ; echo some-part-of-file.3 ) | awk '{ FS = "-" ; print $0 " " $2}'
some-part-of-file.1
some-part-of-file.2 part
some-part-of-file.3 part
Run Code Online (Sandbox Code Playgroud)

为什么不像其他人some-part-of-file.1 $2那样打印part

man*_*ork 11

您将获得第一条记录的空白输出,因为在您设置FS.

您必须读取和解析输入记录之前设置字段分隔符。所以要么

awk 'BEGIN{ FS = "-" }{print $2}'
Run Code Online (Sandbox Code Playgroud)

或者

awk -F'-' '{print $2}'
Run Code Online (Sandbox Code Playgroud)

或者,您可以awk在设置后强制重新解析当前记录FS

awk '{FS = "-"; $0 = $0; print $2}'
Run Code Online (Sandbox Code Playgroud)

关于你的管道,grep不需要,awk也可以做这部分:

ls | awk -F'-' '/some-part-of-file/{print $2}'
Run Code Online (Sandbox Code Playgroud)