이런 데이터가 있어요
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