我有数据:
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
该 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