awk -F 如何工作?

awk -F 如何工作?

你能解释一下下面这段代码是如何工作的吗?

l_Basename="hello_world.ksh"

l_THIS_FILE=`echo $l_Basename | awk -F. '{field=1
             while (field < NF) {
                 printf $field
                 if (field < NF - 1) {
                     printf "."}
                 field++} 
             printf "\n"}'`

答案1

-F.字段分隔符.:给定一行a.b.c.,awk 将看到四个字段:、、、a和(一个空字段)。bc

field=1
while (field < NF) 
{
     printf $field
     if (field < NF - 1) 
     {
         printf "."
     }
     field++
}
  • 代码循环遍历每个字段并打印出来。请注意,field从 1 开始,因为字段 0 是整行(或记录,准确地说)。因为检查是< NF,它永远不会到达最后一个字段。
  • 直到倒数第二个字段,它添加了一个.,大概是作为其他程序处理的字段分隔符。

总而言之,这段代码是一种复杂的实现方式basename,该命令通常用于从文件名中去除扩展名:

$ basename hello_world.ksh .ksh
hello_world

即使在 中awk,更简洁的方法是将字段数减少一:NF--,并将输出字段分隔符设置为.,以便它自动添加到字段之间:

$ echo hello_world.ksh | awk -F. -v OFS=. '{NF--}1'
hello_world

答案2

“-F”选项允许更改 Awk 的“字段分隔符”字符。Awk 将每行输入数据视为由多个“字段”组成,这些“字段”本质上是用空格分隔的单词。空格(或制表符)是默认的“字段分隔符”。在某些情况下,输入数据可能被另一个字符(例如“:”)分隔,如果能够告诉 Awk 使用不同的字段分隔符就好了。这就是“-F”选项的作用。要调用 Awk 并指定“:”作为字段分隔符,我们这样写:

awk -F: ...

在这种情况下,字段分隔符是“。”

相关内容