このようなデータがあります。
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
2つの列と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 -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