Sed
匹配兩個文本文件中以相同模式開頭的行
我現在有兩個文本文件,其中一些行以相同的模式開頭。例如,
文件 A
1Mo 1,1 我愛你。 1Mo 1,2 我喜歡你。 嗨 23,3 我餓了。 嗨 23,4 我很愚蠢。
文件 B
創世記 1:1 我愛你。 創世記 1:2 我喜歡你。 嗨 23.5 我渴了。 嗨 23.6 我是新來的。
文件 A 和文件 B 有兩行分別以相同的模式“1Mo 1,1”和“1Mo 1,2”開頭。我的預期輸出是這樣的:
1Mo 1,1 我愛你。 1Mo 1,2 我喜歡你。 創世記 1:1 我愛你。 創世記 1:2 我喜歡你。
我的想法是我應該使用 grep 來提取文件 A 中每一行的開始模式,然後使用這些模式來匹配文件 B 中的每一行。我嘗試如下編寫 grep 命令,但它失敗了:
grep "^[.Az]*\s[.]*\s" 文件 A > extract.txt
這是我在社區中搜尋並適用於文件 B 中的字元串匹配的命令:
讀取字元串時;執行 grep “$string” 文件 B;完成<提取.txt
有人知道如何為模式提取和匹配做 grep 事情嗎?
文件:
> cat a 1Mo 1,1 I love you. 1Mo 1,2 I like you. 1Mo 1,3 I am hungry. 1Mo 1,4 I am foolish. > cat b 1Mo 1,1 Ich liebe dich. 1Mo 1,2 Ich mag dich. 1Mo 1,5 Ich habe Durst. 1Mo 1,6 Ich bin neu.
找出共享前兩個單詞的共同行(空格分隔):
> awk '{print $1 " " $2}' a > find > grep -f find b | awk '{print $1 " " $2}' > find2
現在找到與這些模式匹配的所有行:
> grep -f find2 a b a:1Mo 1,1 I love you. a:1Mo 1,2 I like you. b:1Mo 1,1 Ich liebe dich. b:1Mo 1,2 Ich mag dich.
最後,過濾文件名:
> grep -f find2 a b | sed 's/^[^:]*://' 1Mo 1,1 I love you. 1Mo 1,2 I like you. 1Mo 1,1 Ich liebe dich. 1Mo 1,2 Ich mag dich.