以下には、ヘッダーが同じでベクトルが異なる複数のファイルがあります。すべて接続する必要がありますが、最初のファイルのヘッダーのみを接続し、他のヘッダーはすべて同じであるため、接続したくありません。
例: 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
上記の「」に似た別のソリューションは、head
GNUtail
または互換を使用します。
最初のファイルのヘッダーを出力に書き込みます。
head -n 2 file1.txt > all.txt
head -n 2
- ファイルの最初の2行を取得します。すべてのファイルの内容を追加します。
tail -n +3 -q file*.txt >> all.txt
- 3行目から最後まで印刷します。 GNUは複数のファイル名を引数(標準の共通拡張子)として使用することができます
-n +3
(GNU拡張子、FreeBSD、およびNetBSDでもサポートされています)、ヘッダーを印刷しないように指示します。ファイル名(read)を使用してファイルを上書きするのではなく、ファイルに追加します。tail
tail
-q
man
>>
>
もちろん、次の2つのコマンドを1行に入力することもできます。
head -n 2 file1.txt > all.txt; tail -n +3 -q file*.txt >> all.txt
またはそれらの間に成功確認を;
置く代わりに。&&
Shell glob 拡張はデフォルトで語彙順にソートされます。つまり、file1.txt
to はfile9.txt
数値順に並べ替えられますが、ロケールに応じておよび間 (またはロケールに応じてその前にも) に並べ替えfile10.txt
られます。使用する場合は、数値ソートに使用されます。file1.txt
file2.txt
file1.txt
zsh
file*.txt(n)