log2FoldChange
부호의 역수를 곱한 값을 기준으로 파일 순위를 매기 려고 합니다 pvalue
.
입력 파일=
Gene baseMean log2FoldChange lfcSE stat pvalue padj
ABCA13 5103.080785 2.543103478 0.438305758 5.802121998 6.55E-09 1.93E-07
ABCA3 18680.58642 -1.553638598 0.460873937 -3.371070638 0.000748767 0.003440638
ABCC1 25566.61312 1.835232419 0.297965004 6.15922137 7.31E-10 2.95E-08
ABCC2 200.351079 1.753257763 0.47254475 3.710247045 0.000207057 0.001190344
ABCC5 18904.8957 2.982575702 0.304484366 9.795497012 1.18E-22 7.21E-20
ABCC6 1071.195985 -1.858889875 0.388613973 -4.783384034 1.72E-06 2.16E-05
ABCC6P1 121.4678884 -2.319956403 0.367695124 -6.309456544 2.80E-10 1.26E-08
ABCC6P2 154.2820927 -2.402177208 0.393773373 -6.100405397 1.06E-09 4.06E-08
ABCC8 71.94941328 -1.651659127 0.494666609 -3.338933936 0.000841006 0.003782183
#!/bin/bash
DGE=$1
RNK=`echo $DGE | sed 's/.txt/.rnk/'`
sed 1d $DGE \
| sort -k6g \
| awk '!arr[$1]++' \
| awk '{OFS="\t"}
{ if ($3>0) printf "%s\t%4.3e\n", $1, 1/$7 ;
else printf "%s\t%4.3e\n", $1, -1/$7 }' \
| sort -k2gr > $RNK
하지만 빈 파일이 출력됩니다.
답변1
그리고 awk
:
awk 'NR!=1{$0=$0" "$3*(1/$6)}1' file | sort -k8,8g
NR!=1
머리글 행을 무시하십시오.$0=$0" "$3*(1/$6)
: 원하는 결과를 포함하는 8번째 필드를 추가합니다.{...}1
1은 긍정적인 조건입니다.awk
이 줄을 인쇄하세요.sort -k8,8g
필드 8을 기준으로 정렬합니다.- 필요한 경우 다른 파이프를 추가하여
... | awk '{$8=""}1'
필드를 다시 제거하십시오.
편집하다: 귀하의 질문에 있는 코드에서 귀하가 긍정적인 결과를 원한다는 것을 알 수 있습니다( $3
의 값이 부정적인 경우에 그래야 함 -1/$7
). 이를 지원하기 위해 내가 변경한 명령은 다음과 같습니다.
awk 'NR!=1{$0=$0" "sqrt(($3*(1/$6))^2)}1' file | sort -k8,8g
저는 조금 다르게 합니다. 먼저 제곱을 구한 다음 제곱근을 구합니다.
답변2
Perl이 구조에 옵니다:
perl -walne 'print,next if 1 == $.;
print $F[2] * $F[5], " $_" ' < file | sort -g
"플래그"가 무엇을 의미하는지 설명할 수 있다면 이를 스크립트에 통합할 수 있습니다.