这让我疯了。这就是我想做的事情,我尽可能地简化了:
这写入awk脚本:
#!/bin/bash/awk
# pass /^CHEM/, /^BIO/, /^ENG/ into someVariable and search file.txt
/someVariable/ {print NR, $0}
或者我可以(但更少)
#!/bin/bash/awk
# pass "CHEM", "BIO", "ENG" into someVariable and search file.txt
$1=="someVariable" {print NR, $0}
我发现BASH / SHELL变量上的各种东西都被传递但我不想学习BASH编程来简单地将值传递给变量。
奖励:我实际上必须在每个文档中搜索125个值,需要评估40个文档。问一下这个问题并不会有什么害处,但我如何获取这125个值的单独文件,将它们单独传递给someVariable?
我在BASH中有各种各样的方法可以做到这一点,但我不理解它们,并且必须有一种方法可以在awk中动态循环一组搜索项(可能是由于我没有相信列表尚未存在)
谢谢你,因为我厌倦了把头撞到墙上。
答案 0 :(得分:1)
我实际上必须在每个文档中搜索125个值,需要评估40个文档。
我们将要搜索的字符串放在$ cat file1
apple
banana
pear
:
file2
让我们调用我们要搜索的文件$ cat file2
ear of corn
apple blossom
peas in a pod
banana republic
pear tree
:
$ awk 'FNR==NR{a[$1]=1;next;} ($1 in a){print FNR,$0;}' file1 file2
2 apple blossom
4 banana republic
5 pear tree
要在file2中搜索file1中的任何单词,请使用:
FNR==NR{a[$1]=1;next;}
a
这会将我们要查找的每个单词存储为数组NR
中的键。
更详细地说,awk
是FNR
到目前为止已阅读的行数,awk
是FNR==NR
到目前为止读取的行数。当前文件。因此,如果file1
,我们仍在阅读第一个命名文件:file1
。对于a[$1]
中的每一行,我们将1
设置为next
。
awk
告诉($1 in a){print FNR,$0;}
跳过其余的命令,然后从下一行重新开始。
a
如果我们接到这个命令,我们就在文件2上。
如果第一个字段是数组let rec calc i prevPrev prev total =
if i = 0 then // exit condition; do your final calc
exp(-xa * xa) * (total - prevPrev) / 4.
else // recur condition, call again
let newPrevPrev = prev
let newPrev = total
let newTotal = (T * newPrev - newPrevPrev + a i)
calc (i-1) newPrevPrev newPrev newTotal
calc 24 initPrevPrev initPrev initTotal
中的键,那么我们打印行号和行。
答案 1 :(得分:0)
“...例如,我希望文件2中的两个正则表达式之间的文本。假设/ apple /,/ pear /。我将如何替换并提取这两个正则表达式之间的文本?...
while read b e; do awk "/^$b$/,/^$e$/" <(seq 1 100); done << !
> 1 5
> 2 8
> 90 95
> !
1
2
3
4
5
2
3
4
5
6
7
8
90
91
92
93
94
95
这两个感叹号之间是范围的输入,而我使用的数据文件是1..100。请注意awk脚本中的双引号而不是单引号。
如果您在文件范围中输入了起始结束值,而在文件数据中输入了数据
while read b e; do awk "/^$b$/,/^$e$/" data; done < ranges
如果要将各种范围打印到不同的文件,可以执行以下操作
while read b e; do awk "/^$b$/,/^$e$/ {print > $b$e}" data; done < ranges
答案 2 :(得分:0)
您可能会或可能不会喜欢的轻微变化......我有时会使用BEGIN部分将文件内容读入数组......
BEGIN {
count = 1
while ("cat file1" | getline)
{
a[count] = $3
count++
}
}
其余的以同样的方式继续。无论如何,也许这也适合你。