不知何故,具体而言并不能很好地转化为标题。
这是我的目标,在cygwin环境中使用BASH脚本:
我基本上每个项目都是单独工作的。我无法弄清楚如何将它们粘在一起。
对于第一步,它是
grep $search_string $filename | awk '{print $1, $5}' | sed -e 's~"~~g' -e 's~ ~\t~g'
其中列出了模式{tab}表
对于第二步,它是
grep -e '{}' $lookup_file | awk '{print $3}'
其中$ lookup_file是schema {tab} table {tab} value
第三步基本上是根据返回的值做的事情"&#34 ;;提交报告,通过电子邮件发送警告,忽略它等等。
我尝试将第一部分和第二部分与xargs一起使用,但它将模式和表名视为文件名并引发错误。
我缺少的胶水是什么?或者有更好的方法吗?
答案 0 :(得分:3)
awk -v s="$search_string" 'NR == FNR { if ($0 ~ s) { gsub(/"/, "", $5); a[$1, $5] = 1; }; next; } a[$1, $2] { print $3; }' "$filename" "$lookup_file"
说明:
NR == FNR { if ($0 ~ s) { gsub(/"/, "", $5); a[$1, $5] = 1; }; next; }
定位第一个文件,在其上搜索有效匹配项,并将键值保存在数组a
中。
a[$1, $2] { print $3; }
定位第二个文件,如果找到与文件的第一列和第二列以及数组a
中的键匹配的内容,则会在第三列中打印该值。
答案 1 :(得分:2)
awk -v search="$search_string" '$0 ~ search { gsub(/"/, "", $5);
print $1"\t"$5; }' "$filename" |
while read line
do
result=$(awk -v search="\b$line\b" '$0 ~ search { print $3; } ' "$lookup_file");
# Do "something" with $result
done