读取 awk 脚本中的 CSV 文件(关闭)
Read a CSV file inside awk script (CLOSED)
我想使用 AWK 脚本而不在终端中输入 CSV 文件,而是从我的代码中调用该文件。
当前输入端:
./script.awk file.csv
所需的输入终端:
./script.awk
另一方面,这是我目前完成的脚本:
#!/usr/bin/awk -f
BEGIN{print"Filtered Elements:"}
BEGIN{FS=","}
{ if (~/.*5.*/ && ~/.*Sh.*/ && (~/.*i.*/ || ~/.*s.*/)) { print } }
{ if (~/.*ra.*/ && ~/.*18.*/ && ~/.*r.*/) { print } }
{ if (~/.*7.*/ && ~/.*l.*/ && (~/.*Fi.*/ || ~/20.*/)) { print } }
} **file.csv**
我也试过这样做:
#!/usr/bin/awk -f
BEGIN{print"Filtered Elements:"}
BEGIN{FS=","}
BEGIN{
while (getline < file.csv > 0) {
{ if (~/.*5.*/ && ~/.*Sh.*/ && (~/.*i.*/ || ~/.*s.*/)) { print } }
{ if (~/.*ra.*/ && ~/.*18.*/ && ~/.*r.*/) { print } }
{ if (~/.*7.*/ && ~/.*l.*/ && (~/.*Fi.*/ || ~/20.*/)) { print } }
}
但是无论哪种方式都发生了错误。
提前致谢!
awk 脚本不是您调用的命令,它是由 awk
解释的一组指令,其中 awk
是您调用的命令。您显然想做的是编写一个 Unix 命令,该命令作为 shell 脚本实现,其中包括对 awk 的调用,例如:
#!/usr/bin/env bash
awk '
{ print "foo", [=10=] }
' 'file.csv'
将其存储在名为 stuff
的文件中(不是 stuff.awk
或 stuff.sh
或任何其他带有后缀的文件),然后将其命名为 ./stuff
或只是 stuff
如果当前目录在你的 PATH
.
虽然从技术上讲您可以使用 shebang 直接调用 awk,但不要这样做 - 请参阅 。
你的第二个例子是一个正确的 getline
循环,除了文件路径应该被引用以被视为一个字符串(而不是一个变量):while (getline < "file.csv" > 0) #...
.
或者,您可以通过在 BEGIN
块中操作 ARGV
和 ARGC
来设置脚本参数(包括输入文件和变量):
BEGIN {
ARGV[1] = "file.csv"
ARGC = 2
}
{
# commands here process file.csv as normal
}
运行 这与 ./script
相同,如果您使用 shell 设置参数(如 ./script file.csv
)。
我想使用 AWK 脚本而不在终端中输入 CSV 文件,而是从我的代码中调用该文件。
当前输入端:
./script.awk file.csv
所需的输入终端:
./script.awk
另一方面,这是我目前完成的脚本:
#!/usr/bin/awk -f
BEGIN{print"Filtered Elements:"}
BEGIN{FS=","}
{ if (~/.*5.*/ && ~/.*Sh.*/ && (~/.*i.*/ || ~/.*s.*/)) { print } }
{ if (~/.*ra.*/ && ~/.*18.*/ && ~/.*r.*/) { print } }
{ if (~/.*7.*/ && ~/.*l.*/ && (~/.*Fi.*/ || ~/20.*/)) { print } }
} **file.csv**
我也试过这样做:
#!/usr/bin/awk -f
BEGIN{print"Filtered Elements:"}
BEGIN{FS=","}
BEGIN{
while (getline < file.csv > 0) {
{ if (~/.*5.*/ && ~/.*Sh.*/ && (~/.*i.*/ || ~/.*s.*/)) { print } }
{ if (~/.*ra.*/ && ~/.*18.*/ && ~/.*r.*/) { print } }
{ if (~/.*7.*/ && ~/.*l.*/ && (~/.*Fi.*/ || ~/20.*/)) { print } }
}
但是无论哪种方式都发生了错误。 提前致谢!
awk 脚本不是您调用的命令,它是由 awk
解释的一组指令,其中 awk
是您调用的命令。您显然想做的是编写一个 Unix 命令,该命令作为 shell 脚本实现,其中包括对 awk 的调用,例如:
#!/usr/bin/env bash
awk '
{ print "foo", [=10=] }
' 'file.csv'
将其存储在名为 stuff
的文件中(不是 stuff.awk
或 stuff.sh
或任何其他带有后缀的文件),然后将其命名为 ./stuff
或只是 stuff
如果当前目录在你的 PATH
.
虽然从技术上讲您可以使用 shebang 直接调用 awk,但不要这样做 - 请参阅
你的第二个例子是一个正确的 getline
循环,除了文件路径应该被引用以被视为一个字符串(而不是一个变量):while (getline < "file.csv" > 0) #...
.
或者,您可以通过在 BEGIN
块中操作 ARGV
和 ARGC
来设置脚本参数(包括输入文件和变量):
BEGIN {
ARGV[1] = "file.csv"
ARGC = 2
}
{
# commands here process file.csv as normal
}
运行 这与 ./script
相同,如果您使用 shell 设置参数(如 ./script file.csv
)。