繁体   English   中英

在shell脚本中使用gawk

[英]using gawk in a shell script

我想做一些事情:

for i in 1 2 3
do
   gawk '{if ($i==$2) {print $0;}}' filename
done

这可能吗?

谢谢

为了避免引用不正确,可以使用gawk的变量传递功能:

for i in 1 2 3
do
    gawk -v param=$i '{if (param==$2) {print $0}}' filename
done

假设您想将gawk脚本

{if ($1 == $2 ) ... }
{if ($2 == $2 ) ... }
{if ($3 == $2 ) ... }

你可以做:

for i in 1 2 3
do
   gawk '{if ($'$i'==$2) {print $0;}}' filename
done

很好,这是有可能的,但是它可能不会做您想要做的事。

......想起来了,你想让它呢? 从你写的内容来看还不清楚。 您可能需要更改的一件事是用双引号替换单引号,因为变量(例如$i )不会被替换为单引号字符串。

您会想到两种可能的脚本解释:

  1. 您确实想搜索“ 1”,“ 2”,然后搜索“ 3”作为filename的第二个字段
  2. 您实际上想搜索第一个壳脚本参数,然后第二个,...

这是循环的两个版本:

for i in 1 2 3; do 
   gawk "{if (\"$i\"==\$2) {print \$0;}}" filename
done
for i in "$@"; do
   gawk "{if (\"$i\"==\$2) {print \$0;}}" filename
done

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM