我有一个包含字母列的文件:
1 2
A C
C G
T C
G C
我正在寻找一种创建列3
的方法,其中包含按字母顺序粘贴的两列。
我知道sort
,但我正在寻找一种方法来awk
。
感谢您的帮助
EDIT
这是输出我正在寻找
3
A:C
C:G
C:T
C:G
答案 0 :(得分:3)
gawk 方法:
awk 'NR==1{$0=$0 OFS "3"}NR>1{ a[$1]; a[$2]; asorti(a,b);
$(NF+1)=b[1]":"b[2]; delete a}1' file | column -t
输出:
1 2 3
A C A:C
C G C:G
T C C:T
G C C:G
NR==1{$0=$0 OFS "3"}
- 将新字段3
添加到标题行
asorti(a,b)
- 按索引排序数组a
。 b
是包含已排序索引的目标数组
$(NF+1)
- 指向最后一栏之后的下一个
答案 1 :(得分:1)
在awk中:
$ awk '{print $1,$2,((s=$1+$2)?s:($1<$2?$1 ":" $2:$2 ":" $1))}' file
1 2 3
A C A:C
C G C:G
T C C:T
G C C:G
最后的排序需要通过管道到sort
:
$ awk ... | sort
1 2 3
A C A:C
C G C:G
G C C:G
T C C:T
解释一下:
((s=$1+$2) ? s : ...)
如果字段值是数字(在这种情况下仅为标题,如果除标题之外的数据是数字,则会导致问题)将它们相加并打印(即1 2 -> 3
)($1<$2 ? $1":"$2 : $2":"$1)
如果$1
按顺序排在$2
之前,请打印出来,否则按相反的顺序打印