2

2つのファイルがあります。file1はクエリファイルで、file2はそれぞれ1列の辞書の一種です。file1の要素がfile2に存在するかどうかを確認したいのですが、出力として1、それ以外の場合は0を指定する必要があります。

これは私がしていることです:

#!/bin/bash
for i in `cat file1 `
   do
     cat file2 | awk '{ if ($1=="'$i'") print 1 ; else 0 }'>>output
   done 

コマンドを改善するための提案をお願いします

ありがとうございました

4

2 に答える 2

5

スクリプト全体が次のようになります。

fgrep -f file1 file2 > output

fgrepを使用できない場合でも、grep -F通常は同じであることを付け加えておきます。

fgrep(または、通常、 )は通常、Aho-Corisack文字列照合アルゴリズムを使用して実装されるため、通常、繰り返しgrep -F使用するよりもかなり高速です。grep覚えておくべき1つのこと(ここでは完全には明確ではありませんが、可能性が高いと思われます)は、finfgrepが表すことですfixed-これは、いくつかの代替固定文字列のいずれにもすばやく一致しますが、REにはまったく一致しませ-各文字列は文字通り単純に一致します。

REマッチングが必要な場合でも-f、grepでこのオプションを使用できるため、次のようになります。

grep -f file1 file2 > output
于 2012-04-25T15:26:05.847 に答える
3

一方通行:

内容file1

monday
tuesday
wednesday
thursday
friday
saturday
sunday

内容file2

tuesday
saturday

次のawkコマンドを実行します。

awk 'FNR == NR { f2[ $1 ] = 1; next } FNR < NR { print (($1 in f2) ? 1 : 0) >"output" }' file2 file1

内容output

0
1
0
0
0
1
0
于 2012-04-25T15:18:59.113 に答える