我是shell脚本的新手,我对使用的awk -FS
和awk -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"]"}'