여러 파일에서 조건이 보이는 경우 특정 열을 파일로 인쇄하려면 어떻게 해야 합니까?

여러 파일에서 조건이 보이는 경우 특정 열을 파일로 인쇄하려면 어떻게 해야 합니까?

다음과 같은 많은 파일(총 2181개 파일, anacovis2_1_summary_betai_reg.out~ anacovis2_2181_summary_betai_reg.out)이 있습니다.

anacovis2_2_summary_betai_reg.out
anacovis2_3_summary_betai_reg.out
anacovis2_4_summary_betai_reg.out
anacovis2_5_summary_betai_reg.out
anacovis2_6_summary_betai_reg.out
anacovis2_7_summary_betai_reg.out
.
.
.
anacovis2_2179_summary_betai_reg.out
anacovis2_2180_summary_betai_reg.out
anacovis2_2181_summary_betai_reg.out

각 파일은 다음과 같습니다.

 COVARIABLE MRK M_Pearson SD_Pearson BF(dB) Beta_is SD_Beta_is eBPis
  1       1    -0.00974041     0.21914544   -10.86437924    -0.00058189     0.00694111     0.03003007
  1       2     0.08603974     0.19711939    -1.27963044     0.00381909     0.00953539     0.16192245
  1       3    -0.02912035     0.20260353   -12.60498743    -0.00146066     0.00633105     0.08749265

각 파일(1~2181)을 반복하고 첫 번째 열(COVARIABLE)이 "1"이면 마지막 열만 인쇄하고 별도의 파일에 저장하고 싶습니다(각 파일의 출력을 별도의 문서).

이 작업 awk이나 다른 제안을 어떻게 할 수 있나요?

답변1

이 작업은 awk.

awk '($1==1){print $NF>FILENAME"_new"}' anacovis2_{1..2181}_summary_betai_reg.out

첫 번째 열이 1과 같은지 확인한 다음 $1==1마지막 열을 $NFFILENAME 형식은 동일하지만 로 끝나는 새 파일에 인쇄하므로 _new출력 파일은 FILENAME_new.

우리가 사용하는 모든 2181개 파일을 읽으려면확장된 매개변수를 중괄호로 묶습니다.여기.

답변2

간단한 해결책은 다음과 같습니다.

for((i=1;i<2182;i++)); do
    file_in="anacovis2_${i}_summary_betai_reg.out"
    file_out="awk_output_${i}"
    awk '$1==1 { print $NF }' "$file_in" >"$file_out"
done

더 빠른 솔루션은 2181 대신 하나의 프로세스 awk만 필요하도록 입력 및 출력 파일을 여는 것입니다 ...awk

관련 정보