File 1:
Connect|20130320000023|UTC|PPP|[email protected]|[email protected]|0BCBE578|
File 2:
Connect|20130320000023|UTC|PPP|[email protected]|[email protected]|0BCBE578|
Connect|20130320000025|UTC|PPP|[email protected]|[email protected]|0BCBE578|
Connect|20130320000025|UTC|PPP|[email protected]|[email protected]|0BCBE578|
列5のfile1とfile2で一致するレコードを見つける必要があります。したがって、上記から出力を返す必要があります。
Connect|20130320000025|UTC|PPP|[email protected]|[email protected]|0BCBE578|
とても感謝しています、
ベストアンサー1
方法#1:grepとawk
このコードスニペットを使用してこれを行うことができます。
$ grep -f <(awk -F '|' '{print $5}' file1) file2
Connect|20130320000025|UTC|PPP|[email protected]|[email protected]|0BCBE578|
詳細
ビットを使用してawk
最初のファイルを解析し、file1
5番目の列をすべて抽出します。その後、これらの値はリストとして使用され、grep
一致する項目を含む2番目のファイルのすべての行が印刷されます。
この方法を使用する際の注意点
file1
この方法はの5番目の列と一致しますfile2
。
方法#2:ちょうどああない
過去にこの現場で使用されていた別の方法は、awk
FNR施設を利用することです。ここではawk
、2つのファイルを繰り返して2番目のファイルを1行ずつ見て、最初のファイルの各行を見つけます。
このようなことが可能です。次の内容をファイルに入れますcmds.awk
。
FNR == NR {
f1[$5] = $5
next
}
{ if ($5 == f1[$5]) print $0; }
その後、次のように実行できます。
$ awk -F '|' -f cmds.awk file1 file2
メモ:代わりにこのモードを使用できますawk
。
FNR == NR {
f1[$5] = $5
next
}
{ if ($5 in f1) print $0; }
はい
$ awk -F '|' -f s.awk file1 file2
Connect|20130320000025|UTC|PPP|[email protected]|[email protected]|0BCBE578|
この方法を使用する際の注意点
この方法では、各Eメールアドレスの単一のインスタンスのみを処理できますfile1
。したがって、列5に同じ値の行が2つある場合は区別できません。 OPが要求する内容を考慮すると、これは許可されているようです。
購読と並べ替え
join
これを行うには、とを使用することもできますsort
。
$ join -t '|' -j 5 <(sort -k5,5 file2) <(sort -k5,5 file1) | sed 's/||.*//'
これにより、区切り文字が使用され、ソートされたファイルが|
5番目の列にリンクされます。このメソッドはfile1
sumから一致を印刷するため、file2
これを使用してsed
2番目の一致を最後から切り取ります。
はい
$ join -t '|' -j 5 <(sort -k5,5 file2) <(sort -k5,5 file1) | sed 's/||.*//'
[email protected]|Connect|20130320000025|UTC|PPP|[email protected]|0BCBE578