我有一个字符串列表,比如 file1.txt:
a
B
ccc
D
E
f
和另一个字符串列表,即file2.txt:
a x y z
43 5 B aa_f
<|ccc
|D>
E
FFF
对于每一行,我想检查 file2.txt 是否包含 file1.txt 的相应行中包含的修剪后的字符串(因此周围没有空格)。例如,两个文件中的第 2 行都包含B
,因此该测试的计算结果应为true
。但是,两个文件中的最后一行不在子字符串关系中,因为 file1.txt 包含f
并且 file2.txt 在该行中没有任何f
字符。
假设您的字符串中不包含空格
file1.txt
,则以下awk
基于的方法应该有效:对于您的示例,这将产生
一些解释:我们使用
awk
读取这两个文件,但以不同的方式处理它们。在处理
file1.txt
由 表示FNR
的“每个文件行计数器”,等于NR
全局行计数器时,我们只需$1
在awk
-internal数组,以行号为索引(注意这些以 1 开头)。在处理
file2.txt
(FNR
现在小于NR
) 时,我们使用该函数在整个输入行 ( )中index
查找字符串。如果是这样,将返回一个大于 0 的起始位置,然后我们 print ,否则我们 print 。patterns[FNR]
$0
index()
true
false
在 Awk 中,我更喜欢以更“cond {action}”的结构编写程序。这与@AdminBee 解决方案非常相似。
ARGIND ==1
- 如果这是第一个参数:保存第一个单词$0 ~ a[FNR]
- 如果此行 ($0
) 包含已保存的同源词,“真”;否则“假”