いくつかの行が同じパターンで始まる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.
答え2
Grepは複数の引数を除外するため、この単純なパターンを例で使用できます。
grep -Eh '1,1|1,2' "File A" "File B"