我有一个AWK脚本,即linux中的ascii文件可执行文件,第一行是:
#!/usr/bin/awk -f
如果我在同一目录中,我会像这样执行myscript:
> ./myscript afile
或者像这样,如果我在另一个目录中:
> pwd
/some_weird_path
> /full_path/myscript afile
我如何才能访问" / full_path /"从AWK脚本本身?我没有成功地尝试以下方法:
ARGV[0] => /usr/bin/awk
ARGV[1] => afile
ENVIRON["PWD"] => some_weird_path
想法?
答案 0 :(得分:1)
这很难看,但似乎与linux上的gnu awk一起使用。
BEGIN {
getline cmdline <("/proc/"PROCINFO["pid"]"/cmdline")
nf=split(cmdline,fields,/\0/)
print fields[3]
}
这甚至更加丑陋,但它应该适用于任何具有ps
实现的系统,只要awk的路径和脚本的路径都不包含空格字符:
BEGIN {
"ps -p "PROCINFO["pid"]" -ocommand=" | getline cmdline
nf=split(cmdline,fields," ")
print fields[3]
}
因人而异。
答案 1 :(得分:1)
我想出了怎么做。基于丰富的建议,这在OSX上对我不起作用,我在&#34; / usr / bin / awk&#34;&#34; / usr / bin / awk&#34;找出哪条线对应于实际命令。
BEGIN {
while ( ( "ps -ocommand=" | getline pslines ) > 0 ) {
if ( pslines ~ "/usr/bin/awk -f" ) {
split(pslines, tmp);
}
}
print tmp[3]
}
它应该适用于任何系统(未经测试)...至少只要相同的用户ID没有在同一时间运行另一个awk副本。