私はデータを持っています:
7456 7456 0 0 0 2
7463 7463 0 0 1 2
出力が次のように列ヘッダーを追加したいと思います。
FID IID PAT MAT SEX PHENOTYPE
7456 7456 0 0 0 2
7463 7463 0 0 1 2
頑張りましたecho -e "FID\tIID\tPAT\tMAT\tSEX\tPHENOTYPE" | cat file1 > file2
ただし、これはヘッダーではなく元のファイルをコピーします。
sed '1i\FID, IID, PAT, MAT, SEX PHENOTYPE' file1 > file2
間違った
sed: 1: "1i\FID, IID, PAT, MAT, ...": extra characters after \ at the end of i command
どんな提案がありますか?
答え1
あなたの試み
echo -e "FID\tIID\tPAT\tMAT\tSEX\tPHENOTYPE" | cat file1 > file2
ほとんど動作しますが、cat
標準入力(実際のヘッダーを含む)では何もしません。以下が機能します。
echo -e "FID\tIID\tPAT\tMAT\tSEX\tPHENOTYPE" | cat - file1 > file2
cat
-
出力は標準入力として解釈され、追加されたコンテンツの前に挿入されます。echo
file1
代替:
{ echo -e "FID\tIID\tPAT\tMAT\tSEX\tPHENOTYPE"; cat file1; } >file2
または
( echo -e "FID\tIID\tPAT\tMAT\tSEX\tPHENOTYPE"; cat file1 ) >file2
答え2
この GNU はsed
ファイルの最初の行にテキストを追加します。
sed -i '1i FID IID PAT MAT SEX PHENOTYPE' test.txt
答え3
代わりに追加の演算子を使用してください>>
。
echo -e "FID\tIID\tPAT\tMAT\tSEX\tPHENOTYPE" > file2 && cat file1 >> file2
答え4
示されているように、データがスペースで区切られているとします。以下は書式設定し、必要なものを取得します。
awk -vOFS="\t" '$1=$1; BEGIN { str="FID IID PAT MAT SEX PHENOTYPE"; split(str,arr," "); for(i in arr) printf("%s\t", arr[i]);print}' infile