file1に存在するfile2にも同じ行が必要です。

file1に存在するfile2にも同じ行が必要です。

File1各行には数字(0〜9桁)が含まれており、レコードの総数は20kです。 File2 最初の列には数字 (0 ~ 9 桁) が含まれ、各行にはその他の情報が含まれており、合計レコード数は 46,000,00 の両方のファイルがソートされています。 file1 に共通項目があるすべてのレコードに対して file2 を grep する必要があります。

ファイル1

988676562 

99373

133838000

ファイル2

99373        dhdhdhdhd, 3838 dheueie,aaaa

133838000  rrtyusbjsjs,382 djdjdjsusu

2233747      Eheueueu. ,446,ttttiieenjs

44577333  Euedjdbebe,777,rrididjd

出力

99373         dhdhdhdhd, 3838 dheueie,aaaa

133838000  rrtyusbjsjs,382 djdjdjsusu

試しましたが、fgrep -f file1 file2出力は0です。

明確にすると、両方のファイルの最初の列はまったく同じです。

ベストアンサー1

File1あなたの行に空の行が含まれているかどうかはわかりません。だから数字のない行は無視するようにしました。また、あなたの例にはFile1末尾のスペースが含まれているようです。これにより、数字以外の文字の前後のすべての文字が削除されます。

このファイルを使用してsedスキーマを生成し、grep結果をスキーマファイルgrepとしてFile2

grep -f <(grep '[0-9]' File1 | sed 's/[^0-9]*\([0-9]*\).*/^\1[^0-9]*.*$/' ) File2

この印刷

99373         dhdhdhdhd, 3838 dheueie,aaaa
133838000  rrtyusbjsjs,382 djdjdjsusu

説明する:

数値を含む行の抽出

grep '[0-9]' File1

grep可能な先行および末尾のゴミを削除し、行の先頭から数字を探し、数字以外の文字やその他の文字が続くか、行末まで何も見つからないパターンを作成します。

sed 's/[^0-9]*\([0-9]*\).*/^[^0-9]*\1[^0-9]*.*$/'

おすすめ記事