shell脚本中awk -FS和awk -f之间的区别



我是shell脚本的新手,我对使用的awk -FSawk -f命令感到非常困惑。我尝试阅读有关这两者之间区别的多页页面,但无法清楚地理解。请帮忙。下面是一个示例:让我们考虑一个文本文件说,data.txt具有以下详细信息。

S.No Product Qty Price
1-Pen-2-10
2-Pencil-1-5
3-Eraser-1-2

现在,当我尝试使用以下命令时:

$ awk -f'-' '{print $1,$2} data.txt

我得到以下输出:

1 Pen
2 Pencil
3 Eraser

但是当我使用命令时:

$ awk -FS'-' '{print $1,$2} data.txt

输出为:

1-Pen-2-10
2-Pencil-1-5
3-Eraser-1-2

我不明白它使用 -FS 命令有什么区别。有人可以帮助我弄清楚这两个命令之间到底发生了什么。谢谢!

你比你想象的更困惑。没有-FS.

FS 是包含字段分隔符的变量。

-F 是一个将FS设置为其参数的选项。

-f是一个选项,其参数是包含要执行的脚本的文件的名称。

发布的脚本会产生语法错误,而不是你说它们产生的输出,所以不知道该告诉你什么......

-FS不是awk的论据。 -F是,-f也是.

-F 参数告诉 awk 要用于FS的值(字段分隔符)。

-f 参数告诉 awk 将其参数用作要运行的脚本文件。

这个命令(我修复了你的引用):

awk -f'-' '{print $1,$2}' data.txt

告诉 awk 使用标准输入(这就是-的意思)作为其参数。在终端中运行时,这应该挂起。之后应该是一个错误,因为awk然后尝试使用'{print $1,$2}'作为文件名进行读取。

此命令:

awk -FS'-' '{print $1,$2}' data.txt

告诉awk使用S-作为FS的值。您可以通过运行以下命令看到:

awk -FS'-' 'BEGIN {print "["FS"]"}'

相关内容

  • 没有找到相关文章

最新更新