特定の列を削除して並べ替える方法

特定の列を削除して並べ替える方法

このようなデータがあります。

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

関連情報