2つの入力ファイルの列を含むファイルを作成したいと思います。ファイル1は次のようになります。
s,a
k,b
h,c
ファイル2は次のようになります。
f,a
g,b
出力は次のようになります。
s,a,f
k,b,g
h,c,-
私はこのようなJoinコマンドを使用します
join -a1 -a2 -t , -1 2 -2 2 -o auto -e "-" file1 file2 > joinoutput
私は次のように出ました。
a,s,f
b,k,g
c,h,-
問題を解決するのに役立ちます。 -o '1.1' のように列の順序を指定できません。最初のファイルの列数がnで、2番目のファイルの場合はn + n -1を確認する必要があります。よろしくお願いします。
答え1
-o auto
使用。 。 。交換-o '1.1 1.2 2.1'
取得するには:
s,a,f
k,b,g
h,c,-
答え2
次perl
のように:
#!/usr/bin/env perl
use strict;
use warnings;
#Data Dumper is for diagnostic printing
use Data::Dumper;
#open second file for reading
open( my $file2, '<', 'sampleb.txt' ) or die $!;
#slurp this file into a hash (key value map) - reverse them, so we use
#the second value as a lookup key.
my %key_values = reverse map {/(\w+),(\w+)/} <$file2>;
close($file2);
#print what we got in that map for diag reasons.
print Dumper \%key_values;
#open the first file
open( my $file1, '<', 'samplea.txt' ) or die $!;
#iterate by line
while (<$file1>) {
chomp; #strip trailing line feed.
#split this line on comma
my ( $key, $value ) = split /,/;
#loopup "$value" in that hash we created - use that if it's defined, or '-' otherwise.
print join( ",", $key, $value, $key_values{$value} // '-' ), "\n";
}
close ( $file1 );
出力:
s,a,f
k,b,g
h,c,-