私は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
はシェルで可能ということですスクリプト?
私は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
はシェルで可能ということですスクリプト?
あなたは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の行しかし、これは文字列の先頭で検索を開始しません。
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
$
シンプルcat
とgrep
組み合わせは私のzshで動作します。 join`が動作するはずソートファイル、 `について
cat 2.txt | grep "$(cat 1.txt)"
又は
grep "$(cat 1.txt)" 2.txt
B 3
C V 4
。 – choroba