특정 열을 삭제하고 정렬하는 방법

특정 열을 삭제하고 정렬하는 방법

이런 데이터가 있어요

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 -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

관련 정보