ノート

ノート

以下には、ヘッダーが同じでベクトルが異なる複数のファイルがあります。すべて接続する必要がありますが、最初のファイルのヘッダーのみを接続し、他のヘッダーはすべて同じであるため、接続したくありません。

例: file1.txt

<header>INFO=<ID=DP,Number=1,Type=Integer>
<header>INFO=<ID=DP4,Number=4,Type=Integer>
A
B 
C

ファイル2.txt

<header>INFO=<ID=DP,Number=1,Type=Integer>
<header>INFO=<ID=DP4,Number=4,Type=Integer>
D
E 
F

出力が必要です。

<header>INFO=<ID=DP,Number=1,Type=Integer>
<header>INFO=<ID=DP4,Number=4,Type=Integer>
A
B
C
D
E 
F

Rでスクリプトを書くことはできますが、それをシェルで使用する必要がありますか?

ベストアンサー1

cat+grep上記の「」に似た別のソリューションは、headGNUtailまたは互換を使用します。

  1. 最初のファイルのヘッダーを出力に書き込みます。

    head -n 2 file1.txt > all.txt
    

    head -n 2- ファイルの最初の2行を取得します。

  2. すべてのファイルの内容を追加します。

    tail -n +3 -q file*.txt >> all.txt
    

    - 3行目から最後まで印刷します。 GNUは複数のファイル名を引数(標準の共通拡張子)として使用することができます-n +3(GNU拡張子、FreeBSD、およびNetBSDでもサポートされています)、ヘッダーを印刷しないように指示します。ファイル名(read)を使用してファイルを上書きするのではなく、ファイルに追加します。tailtail-qman>>>

もちろん、次の2つのコマンドを1行に入力することもできます。

head -n 2 file1.txt > all.txt; tail -n +3 -q file*.txt >> all.txt

またはそれらの間に成功確認を;置く代わりに。&&

Shell glob 拡張はデフォルトで語彙順にソートされます。つまり、file1.txtto はfile9.txt数値順に並べ替えられますが、ロケールに応じておよび間 (またはロケールに応じてその前にも) に並べ替えfile10.txtられます。使用する場合は、数値ソートに使用されます。file1.txtfile2.txtfile1.txtzshfile*.txt(n)

おすすめ記事