我有一个需要文件名的函数。然后,它运行一个命令并过滤两个模式之间的输出(不包括),然后输出逗号分隔的值以及命令的文件名输出。
这是函数和预期输出:
get_cons_obs() {
local line="${1}"
"command" -i "${line}" 2>&1 \
| awk '/^ERROR$/{print "ERROR"} /^START$/{flag=1;next} /^END$/{flag=0} flag' \
| xargs printf "${line},%s\n"
}
file01,thing01
file01,thing02
file01,thing03
.
.
.
是否可以将awk
命令和xargs printf
命令结合起来?我似乎无法将“标记”行与$line
变量一起附加。
答案1
听起来您想将 shell 变量传递line
到 awk 中,以便flag
在非零时可以打印它
前任。
awk -v line="$line" '. . . flag {printf "%s,%s\n", line, $0}'
也可以看看
答案2
尝试使用下面的命令,效果很好
awk '/pattern1/,/pattern2/{print $0","FILENAME}' filename