对于我的文件,如下所示:
AABBCC 10 5 CCAABB 100
BBCCAA 4 2 AABBCC 50
CCAABB 16 8 BBCCAA 20
...我正在尝试通过将第4列与第1列匹配来对第4列和第5列进行排序。
理想情况下,它将返回:
AABBCC 10 5 AABBCC 50
BBCCAA 4 2 BBCCAA 20
CCAABB 16 8 CCAABB 100
我尝试使用排序,但是据我所知,它没有用于在文件中排序的实用程序。
任何帮助将不胜感激!
答案 0 :(得分:3)
awk
解决方案:
awk 'NR==FNR{ a[$4]=$5; next }$1 in a{ print $1,$2,$3,$1,a[$1] }' file1 OFS="\t" file1
输出:
AABBCC 10 5 AABBCC 50
BBCCAA 4 2 BBCCAA 20
CCAABB 16 8 CCAABB 100
您可以在最后通过管道发送到sort
:... | sort
答案 1 :(得分:2)
join -t $'\t' -o 1.1,1.2,1.3,2.1,2.2 <(cut -f1-3 file.tsv | sort -k 1,1) <(cut -f4- file.tsv | sort -k 1,1) | sort
剪切原始文件,然后在两个文件的第一个字段上合并。我们需要在-o
中指定完整连接字段以保留第一列,否则join
会吃掉它。
答案 2 :(得分:2)
使用bash和GNU粘贴:
带有用于说明的临时文件:
cut -f 1-3 file | sort > file_1to3
cut -f 4-5 file | sort > file_4to5
paste -d '\t' file_1to3 file_4to5
没有临时文件:
paste -d '\t' <(cut -f 1-3 file | sort) <(cut -f 4-5 file | sort)
输出:
AABBCC 10 5 AABBCC 50 BBCCAA 4 2 BBCCAA 20 CCAABB 16 8 CCAABB 100