我有一个这样的数据
JW_ID ECK number B number T Number M K12 Conc(%) Yield(uM) Yield(ug/ml)
JW0002 ECK0003 b0003 thrB thrB 32 2.3 78
JW0003 ECK0004 b0004 thrC thrC 18 1.7 78
JW0004 ECK0005 b0005 yaaX yaaX 78 1.2 14
JW0005 ECK0006 b0006 yaaA yaaA 7 2.4 71
JW0007 ECK0008 b0008 talB talB 85 2.7 94
我正在尝试删除两列和 B Number 和 M K12,然后根据 Conc(%) Yield(uM) Yield(ug/ml) 对文件进行升序排序
我运行它作为
bash myprogram.sh filename.txt
我尝试过举办一场狂欢但没有成功,我将不胜感激任何帮助
#!/bin/bash
filename=$1
while read -r line; do
# reading each line
awk '{$3=$5=""; print $0}' filename
sort -k6,1 -k7,2 -k8,3 filename
echo $line
done < $filename
预期的输出是这样的
JW_ID ECK number T Number Conc(%) Yield(uM) Yield(ug/ml)
JW0005 ECK0006. yaaA 7 2.4 71
JW0003 ECK0004. thrC 18 1.7 78
JW0002 ECK0003 thrB 32 2.3 78
JW0004 ECK0005. yaaX 78 1.2 14
JW0007 ECK0008 talB 85 2.7 94
答案1
这awk应该给出期望的结果:
$ awk -F '\t' 'BEGIN{OFS="\t"} { print $1,$2,$4,$6,$7,$8 }' data | sort -nk 4,6
JW_ID ECK number T Number Conc(%) Yield(uM) Yield(ug/ml)
JW0005 ECK0006 yaaA 7 2.4 71
JW0003 ECK0004 thrC 18 1.7 78
JW0002 ECK0003 thrB 32 2.3 78
JW0004 ECK0005 yaaX 78 1.2 14
JW0007 ECK0008 talB 85 2.7 94
如果您的字段数要高得多,这里有一个带有范围函数的版本:
用法:rng([begin],[end])
$ awk -F '\t' '
function rng(b,e, i,d){ d=$b;
for(i=b+1;i<e;i++){ d=d""OFS""$i }
d=d""OFS""$e;
return d
}
BEGIN{OFS="\t"}
{ print rng(1,2),$4,rng(6,8) }' data | sort -nk 4,6