2016-05-30 9 views
-1

私は2列のデータと3列のデータを持つ2番目の巨大なファイルを持つ巨大なファイルを持っています。私は最初のものに基づいて2番目のファイルから3番目の列を抽出したいと思います。Bash。 2つのファイルを持つ交差

A B 
C V 

と第二::

A B 3 
C V 4 
B G 6 

私は、出力ファイルに取得する必要があります。これは、私は、次の最初のファイルを持っている場合ことを意味

A B 3 
C V 4 

はシェルで可能ということですスクリプト?

+0

。 – choroba

答えて

0

あなたはAWKでこれを行うことができます。

% awk 'NR == FNR {a[$0] = 1; next}a[$1 FS $2]' file1 file2 
A B 3 
C V 4 

内訳:

NR == FNR { # Run block for file1 only 
    a[$0] = 1 # Store line in associative array 
    next  # Skip next block 
} 
a[$1 FS $2] # Print lines from file2 if they are in associative array 
      # Same as writing a[$1 FS $2] { print $0 } 

grepを持つもう一つの方法は次のとおりです。

grep -f file1 file2 
でFILE1内の各ラインに一致するようにしようとします

file2の行しかし、これは文字列の先頭で検索を開始しません。

0

grepコマンドでも同じことができます。しかし、少し時間がかかるかもしれません。以下は

$ cat file1.txt 
A B 
C V 
$ cat file2.txt 
A B 3 
B G 6 
C V 4 
$ 

同じのためのgrepのバージョンである:

$ while read line ; do grep "^$line" file2.txt ; done < file1.txt 
A B 3 
C V 4 
$ 
0

シンプルcatgrep組み合わせは私のzshで動作します。 join`が動作するはずソートファイル、 `について

cat 2.txt | grep "$(cat 1.txt)" 

又は

grep "$(cat 1.txt)" 2.txt 

B 3

C V 4

関連する問題