Linux awk脚本中的命令行输入?

Linux awk脚本中的命令行输入?,linux,shell,awk,Linux,Shell,Awk,我有一个通过日志文件解析的awk脚本 剧本: BEGIN{ print "ID", "vFiler", "Type", "host" } /=====/{ vFiler=$2 next } match($0,/root=[^,]*/){ n=split(substr($0,RSTART+5,RLENGTH-5),N,/:/) for(i=1; i<=n; i++)print vFiler,$1,N[i]; } (在secound情况下,ID保持不变

我有一个通过日志文件解析的awk脚本 剧本:

BEGIN{
    print "ID", "vFiler", "Type", "host"
}
/=====/{
    vFiler=$2
    next
}
match($0,/root=[^,]*/){
    n=split(substr($0,RSTART+5,RLENGTH-5),N,/:/)
    for(i=1; i<=n; i++)print vFiler,$1,N[i];
}
(在secound情况下,ID保持不变,因为服务器列在同一类型上)

在执行脚本之后,它应该说“键入ID”之类的话

如果这不能在awk脚本中完成,请不要努力编写shell脚本(一般来说,我只想知道如何完成,但我感谢您的每一个回答)


提前感谢

这不是对你问题的直接回答,但可能是对你的问题的回答。 我假设您生成了一些数据,然后需要对其进行处理。 当您需要保留数据中的某些逻辑时,可以通过shell使用sqlite,而不是生成平面文件,然后使用awk等工具进行解析和处理

若您担心gerating数据的性能(经常执行INSERT而不是简单地回显到文件),您可以将SQL命令回显到文件,然后在处理这些数据之前在单个事务中加载这些数据

更新

那么:

read MYVAR && awk -v MYVAR="$MYVAR" '{print MYVAR $0}' in.log
另一个可移植性较差的版本(gawk扩展):


我认为你说的是对的:

编写执行此操作并执行awk脚本的shell脚本

有一百万种方法可以做到这一点,但我会编写一个bash脚本来调用您的awk脚本

处理任何用户交互和文件系统操作

您还可以使用here文档从bash程序中生成awk文件。今天晚些时候我会给你看


Linux的一大优势是“小程序牵手”。Windows最大的缺点是一个独石程序的概念,它可以做所有的事情。

我基本上只想通过手动输入在第一列中获取一个数字,其余的只是通过一个日志进行解析,所以你想从一个日志文件和交互用户的stdin输入中读取数据,对吗,我想在开始阅读之前获得一个输入,输入应该设置为=一个变量,然后与ParsingYea的结果一起列出。Yea已经编写了一个shell脚本,它可以很好地完成这项工作。为了完整性,请在原始问题中发布您的解决方案,然后将其标记为已回答。如果这是一个独立的awk脚本,那么将传递给awk的最后一个参数/文件作为搜索对象。将变量设置为argv[N],然后将其从argc中删除
read MYVAR && awk -v MYVAR="$MYVAR" '{print MYVAR $0}' in.log
awk 'BEGIN{ "head -1" | getline MYVAR; print MYVAR }{print MYVAR $0}' in.log