나는 데이터를 가지고 있습니다 :
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