File-Comparison
檢查一個列表是否包含另一個列表中包含的字元串
我有一個字元串列表,比如 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 'NR==FNR{patterns[FNR]=$1} FNR<NR{if (index($0,patterns[FNR])>0) print "true"; else print "false"}' file1.txt file2.txt
對於您的範例,這將產生
true true true true true false
一些解釋:我們使用
awk
讀取這兩個文件,但以不同的方式處理它們。
- 在處理
file1.txt
由 表示FNR
的“每個文件行計數器”,等於NR
全域行計數器時,我們只需$1
在awk
-internal數組,以行號為索引(注意這些以 1 開頭)。- 在處理
file2.txt
(FNR
現在小於NR
) 時,我們使用該函式在整個輸入行 ( )中index
查找字元串。如果是這樣,將返回一個大於 0 的起始位置,然後我們 print ,否則我們 print 。patterns[FNR]``$0``index()``true``false