簡體   English   中英

在Unix中加入多個文件

[英]joining multiple files in unix

我的文件夾中有多個文件,其中包含鍵和值(以空格分隔)以及僅包含鍵值的文件。 所有文件均按鍵排序。 全部具有相同的鍵。 (也沒有丟失的鍵)。 我想要一個帶有的文件, 后跟所有值 (從同一文件到同一列的值)

密鑰文件如下所示:

00001740-a

00001740-n

00001740-r

00001740-v

00001837-r

00001930-n

00001981-r

00002098-a

其余文件如下所示:

00001740-a      5.21718e-05

00001740-n      3.32329e-05

00001740-r      4.5483e-06

00001740-v      7.54663e-05

00001837-r      8.79043e-06

00001930-n      3.75099e-06

00001981-r      1.4668e-06

00002098-a      3.18465e-06

我在加入手冊頁上找不到任何內容。 請幫我在這里。

man join:

NAME
       join - join lines of two files on a common field

SYNOPSIS join [OPTION]... FILE1 FILE2

更新-我編寫了一個Shell腳本來生成作為答案之一提到的命令,並將其輸出到另一個Shell文件中,然后執行它。 還有更好的主意嗎?

 #!/bin/bash
 echo -n "paste offsets.txt "
 for f in *.ppv
 do
     echo -n " <(cut -f2 "$f")"
 done

請嘗試以下命令:

join FILE1 FILE2 | join - FILE3 | join - FILE4

怎么樣:

paste keyfile <(cut -d' ' -f2 file1) <(cut -d' ' -f2 file2) ... <(cut -d' ' -f2 fileN)

如果數據足夠小以適合內存,請嘗試:

awk 'NF > 1{ a[$1] = a[$1] " " $2} END {for( i in a ) print i, a[i]}' *.ppv

這將以不同的順序輸出鍵,因此您可能希望通過管道將輸出sort

您可以使用“ eval”執行命令,例如:

#!/bin/bash
first="1"
for f in *.ppv
do
    if [[ ${first} -eq "1" ]]; then
        command="join offset.txt ${f}"
        first="0"
    else
        command="${command} | join - ${f}"
    fi
done
eval ${command}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM