- 论坛徽章:
- 25
|
回复 25# greaterwei
文件refs.dat内容如下:
ACBACU ACPRCU aaa
ACCAFA ADESXA bbb
CATPAL AOXSCH ccc
CDACET 111 ddd
CDCAZA
文件cons.dat内容如下:
ACBACU 1.397 0.854 2.782 0 0 0.211 4 4 4 4 4 4
ACPRCU 3.535 2.441 1.565 0 0 0.373 3 2 3 3 2 3
AOXSCH 2.159 1.340 3.080 0 0 0.365 3 2 3 3 2 3
CATPAL 3.807 2.039 2.788 0 0 0.386 4 3 3 4 3 3
CDCAZA 4.439 2.496 1.525 0 0 0.390 3 1 3 3 1 3
以下代码适合任意列,重新生成的文件ref-left.dat每列的行数是不同的,因此为了保证数据的准确性防止串列,增加了“---”符号。
- awk 'FILENAME==ARGV[1]{a[$1]=$0;next}{m=m>NF?m:NF;for(i in a){for(j=1;j<=NF;j++){if($j~i){$j="";print a[i]>j".dat"}}}}{for(i=1;i<=NF;i++){s[i]=s[i]?s[i]" "$i:$i}}END{for(i=1;i<=m;i++){split(s[i],t);n=n>length(t)?n:length(t)};for(i=1;i<=m;i++){split(s[i],t);for(j=1;j<=n;j++){t[j]=t[j]?t[j]:"---";p[j]=p[j]?p[j]" "t[j]:t[j]}}for(i=1;i<=n;i++){print p[i]>"ref-left.dat"}}' cons.dat refs.dat
复制代码
输出:
$ cat 1.dat
ACBACU 1.397 0.854 2.782 0 0 0.211 4 4 4 4 4 4
CATPAL 3.807 2.039 2.788 0 0 0.386 4 3 3 4 3 3
CDCAZA 4.439 2.496 1.525 0 0 0.390 3 1 3 3 1 3
$ cat 2.dat
ACPRCU 3.535 2.441 1.565 0 0 0.373 3 2 3 3 2 3
AOXSCH 2.159 1.340 3.080 0 0 0.365 3 2 3 3 2 3
$cat ref-left.dat
ACCAFA ADESXA aaa
CDACET 111 bbb
--- --- ccc
--- --- ddd
|
|