gpt4 book ai didi

linux - 如果找到模式,如何使用 awk 打印 "hello"

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:24 25 4
gpt4 key购买 nike

我想在制表符分隔的 .txt 文件中搜索模式,如果在一行中找到该模式,则打印该行的第三个字段。

我只需要找到该行中的第一次出现,因为该模式肯定只出现一次。

.txt 文件的结构:

XXX01 foo target1
XXX02 bar target2
XXX03 foobar target3

我的第一个想法是,如果找到模式,打印“hello”,控制我的代码是否有效。我还包含了我传递给 bash 脚本的变量的 echo 。

命令行调用和脚本:

$ ./script.sh file.txt foo

#!/bin/bash
file=$1
pattern=$2


awk '/"$pattern"/{print "hello"}' "$file"

echo "$file"
echo "$pattern"

就我在 awk 中找到的而言,要打印第三个字段,我必须将打印“hello”替换为打印“\$2”。

但是打印“hello”已经行不通了:

实际输出:

file.txt
foo

期望的输出:

hello (respectively target1)
file.txt
foo

而且我还确定,“foo”在 file.txt 中

进度(请查看评论和回答):

#!/bin/bash

awk -v p="$2"'$2=="$p"{print "hello",$3}' "$1"

echo "$1"
echo "$2"

新输出:

awk: 1:unexpected character '.'
file.txt
foo

最佳答案

我相信你想要这样的东西:

$ ./script.sh file.txt foo

#!/bin/bash
file=$1
pattern=$2


awk -v pattern=$pattern'$2==pattern{print "hello",$3}' "$file"

echo "$file"
echo "$pattern"

这里我们摆脱了循环,因为 awk 在输入文件时检查每条记录。我们还使用 -v 标志将 $pattern 变量传递到 awk 脚本中。然后我们检查第二个字段 $2 是否为 pattern 并打印 "hello" 以及第三个字段 $3< 的内容.

如果需要,您可以将 awk 条件更改为 $2~/pattern/ 以真正利用正则表达式,但我怀疑它会将第一行和第三行打印为 foo 出现在两者中。

如果你想检查你的模式是否存在于行中的任何地方,那么你可以删除 $2~ 所以它只是 '/pattern/{print "hello",$2}.

关于linux - 如果找到模式,如何使用 awk 打印 "hello",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46983041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com