列を一致させて2つのCSVファイルを結合し、結合コマンド

列を一致させて2つのCSVファイルを結合し、結合コマンド

列1に基づいて一致させる必要がある2つの.csvファイルがあります。

2つのファイル構造は次のとおりです。

ファイル1

gopAga1_00004004-RA,1122.825534,    -2.497919969,   0.411529843

gopAga1_00010932-RA,440.485381, 1.769511316,    0.312853434 

gopAga1_00007012-RA, 13.37565185,   -1.973108929,   0.380227982

etc...

ファイル2

gopAga1_00004004-RA,    ENSACAP00000013845

gopAga1_00009937-RA,    ENSACAP00000000905

gopAga1_00010932-RA,    ENSACAP00000003279

gopAga1_00000875-RA,    ENSACAP00000000296

gopAga1_00010837-RA,    ENSACAP00000011919

gopAga1_00007012-RA,    ENSACAP00000012682

gopAga1_00017831-RA,    ENSACAP00000016147

gopAga1_00005588-RA,    ENSACAP00000011117

etc..

これは現在Joinを使って実行するコマンドです。

これは私が次のスレッドで読んだ内容の形式です。ここ

join -1 1 -2 1 -t , -a 1 -e "NA" -o "2.2,1.1,1.2,1.3" <(sort -k 1 healthy_vs_unhealthy_de.csv) <(sort RBH.csv) > output.txt

ただし、このプロンプトを実行するたびに、出力の最初の行だけが記録されます。

私のコードがこのように動作し、実際にGOP IDに基づいて2つのファイルをマージしない理由を知っている人はいますか?

答え1

区切り文字をカンマで指定する必要があります。sort

# join -1 1 -2 1 -t , -a 1 -e "NA" -o "2.2,1.1,1.2,1.3" <(sort -t',' -k 1 healthy_vs_unhealthy_de.csv) <(sort -t',' RBH.csv)
ENSACAP00000013845,gopAga1_00004004-RA,1122.825534,    -2.497919969
ENSACAP00000012682,gopAga1_00007012-RA, 13.37565185,   -1.973108929
ENSACAP00000003279,gopAga1_00010932-RA,440.485381, 1.769511316

答え2

〜のように芝は正確に指摘した、主な問題は、sortユーティリティが誤って呼び出されることです。ただし、スペースが挿入され、ソートに問題が発生する可能性があります。

使用に切り替えるcsvkitのツールコマンドラインからCSVファイルを解析して処理するには、それを使用して結合をcsvjoin実行できます。これは、入力データに空行がないと仮定します。空白行がある場合は、最初に削除されますgrep -vx '[[:blank:]]*'

csvjoin --no-header-row --skipinitialspace --columns=1 file1 file2

または短いオプションを使用してください。

csvjoin -HS -c 1 file1 file2

あなたの質問にデータが与えられると、次のものが出力されます。

a,b,c,d,b2
gopAga1_00004004-RA,1122.825534,-2.497919969,0.411529843,ENSACAP00000013845
gopAga1_00010932-RA,440.485381,1.769511316,0.312853434,ENSACAP00000003279
gopAga1_00007012-RA,13.37565185,-1.973108929,0.380227982,ENSACAP00000012682

後で削除できるヘッダーを追加します(おそらく使用tail -n +2)。

これを並べ替えて3番目の列を削除するには、上記の追加ヘッダーcsvcutも削除します。tail

csvjoin -HS -c 1 file1 file2 |
csvcut -c 5,1-3 |
tail -n +2

...結果は次のとおりです。

ENSACAP00000013845,gopAga1_00004004-RA,1122.825534,-2.497919969
ENSACAP00000003279,gopAga1_00010932-RA,440.485381,1.769511316
ENSACAP00000012682,gopAga1_00007012-RA,13.37565185,-1.973108929

使用される列は、または同様の組み合わせなどの一時csvcutヘッダーを使用して指定できます。-c b2,a,b,c-c b2,1-3

関連情報