両方のテキストファイルで同じパターンで始まる行の一致

両方のテキストファイルで同じパターンで始まる行の一致

いくつかの行が同じパターンで始まる2つのテキストファイルがあります。例えば、

ファイルA

1Mo 1,1が大好きです。
1Mo 1,2 私はあなたが好きです。
こんにちは23,3空腹です。
こんにちは23,4私はばかです。

文書B

1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.
こんにちは、23,5私はDusterです。
こんにちは、23,6 Ich bin Neuです。

ファイルAとファイルBには、それぞれ同じパターン「1Mo 1,1」と「1Mo 1,2」で始まる2行があります。私の予想結果は次のとおりです。

1Mo 1,1が大好きです。
1Mo 1,2 私はあなたが好きです。
1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.

私の考えは、grepを使用してファイルAの各行の開始パターンを抽出し、そのパターンを使用してファイルBの各行と一致させる必要があることです。以下のようにgrepコマンドを書いてみましたが、失敗しました。

grep "^[.Az]*\s[.]*\s" ファイル A > extract.txt

以下は、コミュニティを検索してファイル B の文字列一致に適用したコマンドです。

文字列を読み取るときにgrep "$ string" file Bを実行します。 <extract .txt

パターン抽出とマッチングにgrepを使用する方法を知っている人はいますか?

ベストアンサー1

文書:

> 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.

最初の2つの単語を共有する共通の行を見つけます(スペースで区切ります)。

> 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.

おすすめ記事