헤더 행이있는 많은 열이있는 큰 데이터 파일 (csv 아님)이 있습니다. 열 머리글은 문자와 숫자가 포함 된 문자열입니다. 머리글이 두 번째 파일에있는 경우 해당 머리글을 기반으로 데이터 열을 추출하는 스크립트를 작성하고 싶습니다. 나는이 질문을 연구하고, AWK extract columns from file based on header selected from 2nd file에있는 답변에서 수정 한 스크립트를 썼다. 나는 그것이하는 일의 좋은 부분을 이해하지만, 나는 그것을 완전히 이해하지 못한다는 것을 인정할 것입니다. 나는 그것이 csv 파일을 위해 설계되었다는 것을 알고있다. 나는 내 파일과 함께 사용하려고 시도했지만, 작동시키지 못한다.헤더 파일을 사용하여 헤더를 기반으로 데이터 파일에서 열 추출
(참고 : $의 motif_list 및 $ affinity_matrix이 두 파일의 경로이며, 이전에 bash는 스크립트에 정의 된)
43 awk -v motif_list="$motif_list" -v affinity_matrix="$affinity_matrix" '
44 BEGIN {
45 j=1
46 while ((getline < motif_list) > 0)
47 {
48 col_names[j++] = $1
49 }
50 n=j-1;
51 close(motif_list)
52 for (i=1; i<=n; i++) s[col_names[i]] = i
53 }
54
55 NR==1 {
56 for (f=1; f<=NF; f++)
57 if ($f in s) c[s[$f]]=f
58 next
59 }
60
61 {
62 sep=" "
63 for (f=1; f<=n; f++)
64 {
65 printf("%c%s",sep,$c[f])
66 sep=FS
67 }
68 print " "
69 }' "$affinity_matrix" > $affinity_columns
나 또한 (여기 (bash는 스크립트에 포함 된) 코드입니다 " '에서' '세퍼레이터 변경되었지만 그 샘플 입력 및 출력 테이블 여기에, 예를 들어)
그것을 옳은 방법이 아닐 수
입력 :
01,238,출력은 :
A C
1 3
1 3
1 3
1 3
1 3
는 모든 입력은 많이 주시면 감사하겠습니다!
감사