【发布时间】:2016-08-20 02:27:56
【问题描述】:
我有一个大数据文件(不是 csv),其中包含许多带有标题行的列。列标题是包含字母和数字的字符串。如果标题存在于第二个文件中,我想编写一个脚本,根据标题提取数据列。我研究了这个问题,并根据AWK extract columns from file based on header selected from 2nd file 的答案编写了一个脚本。我理解它的大部分功能,但我承认我并不完全理解它。我知道它是为 csv 文件设计的......我尝试将它与我的文件一起使用,但我无法让它工作。这是代码(包含在 bash 脚本中):
(注意:$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
(我也将分隔符从“”更改为“”,但这可能不是正确的做法)
例如,这里是示例输入和输出表:
输入:
A B C D E F
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
输出:
A C
1 3
1 3
1 3
1 3
1 3
任何意见将不胜感激!
谢谢
【问题讨论】: