0

file1を含むファイルがあります

123 foo
45  bar
678 foobar
...

およびfile2含む

xyz
foo
foobar
...

file12 番目の列が に表示される行のみを含むファイルを取得したいfile2:

123 foo
678 foobar
...

列はタブで区切られています。可能であれば、Mac OS X コマンドラインからこれを実行したいと思います。

4

6 に答える 6

3

これは間違いなく次の仕事ですjoin:

$ join -1 2 -2 1 <(sort file) <(sort file2)
foo 123
foobar 678
于 2013-01-01T15:04:52.160 に答える
2

これを試して :

grep -f file2 file1 > Output.txt

ファイル1

123 foo
45  bar
678 foobar

ファイル2

xyz
foo
foobar

出力.txt

123 foo
678 foobar
于 2013-01-01T14:32:53.003 に答える
2

Perl の使用:

use strict;
use warnings;

my %seen;
open (my $input2, "<", "input2") or die("open input2: $!");
while (<$input2>) { chomp; $seen{$_}++; }
close $input2;

open (my $input1, "<", "input1") or die("open input1: $!");
while (<$input1>) {
  chomp;
  my $key = (split (/\s+/))[1];
  print "$_\n" if $seen{$key};
}
close $input1;

joinまたは、 andを使用してこれを行うことができますsort

sort input2 > input2sorted
join -1 2 -2 1 input1 input2sorted

また次回は、質問に対する見解を投稿して、より具体的な質問をすることができます。

于 2013-01-01T05:52:25.520 に答える
1

を使用する 1 つの方法を次に示しawkます。

awk -F "\t" 'FNR==NR { a[$0]++; next } $2 in a' file2 file1

結果:

123 foo
678 foobar
于 2013-01-01T10:12:29.910 に答える
0

File::Slurpを使用してファイルを読み取る perlオプションを次に示します。map'keys'を使用してハッシュを初期化するために使用され、正規表現は、grepエントリがハッシュ内にある場合に一致する行のみを通過させるために使用される最後の列エントリを取得します。

use strict;
use warnings;
use File::Slurp qw/read_file/;

my %keys = map { chomp; $_ => 1 } read_file 'file2.txt';
print for grep { /\t(.+)$/; $keys{$1} } read_file 'file1.txt';

データセットへの出力:

123 foo
678 foobar
于 2013-01-01T17:23:45.127 に答える