如何向列添加标题

如何向列添加标题

我有数据:

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将解释为标准输入,并在添加 的内容之前-插入 的输出。echofile1

替代:

{ echo -e "FID\tIID\tPAT\tMAT\tSEX\tPHENOTYPE"; cat file1; } >file2

或者

( echo -e "FID\tIID\tPAT\tMAT\tSEX\tPHENOTYPE"; cat file1 ) >file2

答案2

该 GNUsed将文本添加为​​文件中的第一行:

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

相关内容