열에 헤더를 추가하는 방법 [중복]

열에 헤더를 추가하는 방법 [중복]

나는 데이터를 가지고 있습니다 :

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

이 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

관련 정보