我今天之前问过一个非常相似的问题,但是我意识到我需要增加命令的参数。我为另一个参数编辑了命令,但是下一个参数我没有成功,我不知道为什么。这是我正在尝试(并且失败)解决的问题。
我需要检查一个变量中一组特定列的每一行中的信息与另一个变量中两个特定列中的所有行,使用awk
,保持第一个变量中满足参数的行。
到目前为止,我尝试通过一个强大的awk
命令来执行此操作都失败了。我显然可以在外部循环中执行此操作,但它会非常慢,因为我有 100 条数千行要检查。我感谢解决这个问题的任何和所有帮助,我一直在寻求改进我对 awk 的使用,所以如果你有一个解决方案,最好有一个解释,这样我就可以学习和提高自己。
这是一个例子:
假设我只想打印来自 的行
${ListToCheckFrom}
,如果第 2 列 >= 并且第 3 列 <= 到来自${ListToCheckAgainst}
. 此外,第 1 列${ListToCheckFrom}
必须与第 1 列相同${ListToCheckAgainst}
输入示例:
ListToCheckFrom="r,2,3
C,22,24
C,12,13
C,51,59
C,15,20
C,13,18"
ListToCheckAgainst="C,25,50
C,22,30
C,12,18
C,15,17
C,1,12
C,60,200"
- 预期输出:
C,22,24
C,12,13
C,15,20
C,13,18
- 我从一个答案(感谢@AdminBee)到我今天问的一个更简单的问题:
awk -F',' 'list=="constraints"{n++; low[n]=$2;high[n]=$3;c[n]=$1;next}
{for (i=1;i<=n;i++) {if (($1==c[i])&&($2>=low[i]&&$2<=high[i])||($3>=low[i]&&$3<=high[i])) {print;next};}}' list=constraints <(echo "$ListToCheckAgainst") list=check <(echo "$ListToCheckFrom")
我正在使用 Ubuntu。
基于您对上一个问题的另一个答案:
关于您询问修改的脚本,这是您上一个问题的答案:
您尝试增强它的第一步应该是使它更易于阅读,例如,如果您运行 awk 部分
gawk -o-
并在其周围添加 shell 部分,您会得到以下信息:希望从那里可以很容易地看到要使其满足您的新要求所需要做的一切就是将其更改为: