gawk - 입력 파일 필드를 사용하여 텍스트 파일을 동적으로 생성합니다.

gawk - 입력 파일 필드를 사용하여 텍스트 파일을 동적으로 생성합니다.

다음과 같은 텍스트 파일이 있습니다.

UICEX_0001  UICEX_0001_T1.bam   UICEX_0001_C2.bam   chr1:16946335   chr19:9064309   chr8:10480278                                                                               
UICEX_0003  UICEX_0003_T1.bam   UICEX_0003_C2.bam   chr1:16974893

이 정보를 사용하여 문자열을 결합하고 텍스트 파일에서 정보를 동적으로 입력하여 다음과 같은 것을 만들려고 합니다. 나는 원해요:

  • 각 행을 반복합니다.
  • 처음 3개 열을 변수에 할당
  • 이 변수를 사용하여 일부 텍스트를 인쇄하십시오.
  • 그런 다음 네 번째 끝 열을 반복합니다.
  • 구체적인 내용을 인쇄하세요.

내 출력 파일의 예는 다음과 같습니다.

결과물 파일

load UICEX_0001_T1.bam
load UICEX_0001_C2.bam
goto chr1:16946335
collapse
snapshot UICEX_0001_chr1:16946335.png
goto chr19:9064309
collapse
snapshot UICEX_0001_chr19:9064309.png
goto chr8:10480278
collapse
snapshot UICEX_0001_chr8:10480278.png

load UICEX_0003_T1.bam
load UICEX_0003_C2.bam
collapse
snapshot UICEX_0003_chr1:16974893.png

내가 시도한 것

gawk 명령을 중첩하면 이 작업을 수행할 수 있을 것 같습니다. 내가 시도한 것은 다음과 같습니다.

SAMPLEFILE = "2016-10-13_mutation_table.txt"
gawk -F";" 'BEGIN{
gawk -F";" -v SAMPLE=$(cat $SAMPLEFILE | cut -d"\t" -f1) -v BAMT=$(cat $SAMPLEFILE | cut -d"\t" -f2) -v BAMN=$(cat $SAMPLEFILE | cut -d"\t" -f3);}{print "new \nload " $BAMN;}
{print "new \nload " $BAMT;}
{awk "{for(i=4; i<=NF-1; i++){ print "goto " $i ; print "collapse\nsnapshot " $SAMPLE"_"$i".png";} }" 2016-10-13_mutation_table.txt;

}END{print "exit \n"}'

하지만 이 명령을 실행하면 다음 오류가 발생합니다.

gawk: cmd. line:2: gawk -F";" -v SAMPLE=$(cat $SAMPLEFILE | cut -d"\t" -f1) ...
gawk: cmd. line:2:                     ^ syntax error

답변1

try this

$ awk '{printf("load %s\nload %s\n",$2,$3);for(i=4;i<=NF;i++){printf("goto %s\ncollapse\nsnapshot %s_%s.png\n",$i,$1,$i)}}' test.t
    load UICEX_0001_T1.bam
    load UICEX_0001_C2.bam
    goto chr1:16946335
    collapse
    snapshot UICEX_0001_chr1:16946335.png
    goto chr19:9064309
    collapse
    snapshot UICEX_0001_chr19:9064309.png
    goto chr8:10480278
    collapse
    snapshot UICEX_0001_chr8:10480278.png
    load UICEX_0003_T1.bam
    load UICEX_0003_C2.bam
    goto chr1:16974893
    collapse
    snapshot UICEX_0003_chr1:16974893.png

답변2

너 뭐야~인 것 같다이 이루어지도록 요청됩니다

awk '
  NR > 1 {print ""}
  {
    printf("load %s\nload %s\n", $2, $3);
    for (i=4; i<=NF; i++) {
      if (NF > 4) printf("goto %s\n", $i);
      printf("collapse\nsnapshot %s_%s.png\n", $1, $i);
    }
  }
' samplefile

관련 정보