带有 awk 的 bash 脚本

带有 awk 的 bash 脚本

我正在运行一个 bash 脚本,我输入一个文件,它读取该文件并循环运行该文件。我的问题是我的 awk 命令。我不知道为什么我会收到错误

我输入一个运行脚本的文件

./almost.sh < text.txt

脚本是

#!/bin/bash

while read STRING
do
    echo $STRING
    "awk -v RS='' -v ORS='\n\n'  $STRING file.txt" >> out.txt 

     #grep $STRING dbutils.list.Volume.txt >> out.txt
done

我得到的输出是

00061
./almost.sh: line 6: awk -v RS='' -v ORS='\n\n'  00061 list.txt: command not found
00062
./almost.sh: line 6: awk -v RS='' -v ORS='\n\n'  00062 list.txt: command not found
00091
./almost.sh: line 6: awk -v RS='' -v ORS='\n\n'  00091 list.txt: command not found
000C1
./almost.sh: line 6: awk -v RS='' -v ORS='\n\n'  000C1 list.txt: command not found
000C2
./almost.sh: line 6: awk -v RS='' -v ORS='\n\n'  000C2 list.txt: command not found

有人可以帮忙使用 awk 命令吗?如果该命令不在循环中而仅运行一次,则该命令可以正常工作。

答案1

报错是因为没有命令

"awk -v RS='' -v ORS='\n\n'  $STRING file.txt"

awk 及其参数(没有意义)位于双引号之间,对于 shell,该组合是命令,shell 正在查找名为“awk -v RS='' -v ORS='\n\n' 的文件$STRING 文件.txt”。

也许你的意思是

awk -v RS='' -v ORS='\n\n'  "/$STRING/" file.txt >> out.txt

答案2

由于还没有进一步的回复,我建议整个脚本可以简单地替换为

grep -F -f text.txt file.txt >out.txt

这是假设 text.txt 的输入只是要检查的字符串而不是正则表达式,由错误消息建议将 $STRING 替换为 000.. 因此, -f 从文件中读取每个字符串,而 -F 只是处理它们作为普通字符串。任何与 file.txt 匹配的内容都将被发送到 out.txt。

作为对下面 dave_thompson_085 的评论的回应,如果存在具有已知结构的段落,这可能仍然有用,即查找的字符串位于每个段落中的特定行,然后-B-A选项也可用于打印之前的行数以及赛后。

相关内容