awk 프로그램에서 파일 이름의 일부로 내보낸 변수 사용

awk 프로그램에서 파일 이름의 일부로 내보낸 변수 사용

나는 내 프로필에 하나를 설정 export X25DATAF=/home/Bob/X25/Datafiles하고 이것이 내가 하는 일입니다 echo $X25DATAF.

/home/Bob/X25/Datafiles아래 내용을 프로그램의 2개 위치로 바꾸고 싶습니다. 그러나 작동하게 할 수 없습니다(예: ). 그렇게 하면 내가 해야 할 일은 이 프로그램을 실행 중인 시스템(및 기타 유사한 프로그램)의 경로에 대한 경로를 설정하는 것뿐입니다.awk$X25DATAFawk$X25DATAF/ALL_SW_DB.txtexportawk

awk -F"\t" ' 
FILENAME=="Sites1" {
  cllina[$0]=$0
}
FILENAME=="/home/bob/X25/DataFiles/ALL_SW_DB.txt" {
  swclli=hostclli=""
  swclli=substr($7,1,8)
  hostclli=substr($3,1,8)
  fclli[hostclli]++
  fclli[swclli]++

  if(hostclli==cllina[hostclli]) {
    if(swclli!=hostclli) {
      printf"REM|%s|%s|%s|%s|%s|%s|%s|%s|%s-%s\n",hostclli,$4,$3,$6,$9,$7,$12,$13,$5,$14 >>"host_remote"
    }
   }

  if(swclli==cllina[swclli]) {
      printf"HOST|%s|%s|%s|%s|%s|%s|%s|%s|%s-%s\n",swclli,$4,$3,$6,$9,$7,$12,$13,$5,$14 >>"host_remote"
    }
 }
 END{
  for(x in cllina)
    if(fclli[x]=="") printf"%s\n",x >"site1.err"
}' Sites1 /home/bob/X25/DataFiles/ALL_SW_DB.txt

답변1

평소와 같이 구문 FNR==NR(파일 줄 번호는 전체 줄 번호와 동일)이 첫 번째 파일에 사용되고 next두 번째 파일 지시문에 대한 작업을 건너뜁니다.

awk -F'\t' -v OFS='|' '
    FNR==NR{
        cllina[$0]=1
        next
    }
    {
        swclli=hostclli=""
        fclli[swclli]++
    }
    cllina[hostclli] && swclli!=hostclli{
        print "REM",hostclli,$4,$3,$6,$9,$7,$12,$13,$5,$14
    }
    cllina[swclli]{
        print "HOST",swclli,$4,$3,$6,$9,$7,$12,$13,$5,$14
    }
    }' Sites1 /home/bob/X25/DataFiles/ALL_SW_DB.txt >>host_remote

또는 질문에 대한 댓글을 확인하세요.

답변2

다음은 더 간단한 예입니다. 내 프로필에서 2개의 인스턴스를 ( ) /home/Bob/X25/DataFiles내보내기 로 바꾸고 싶습니다. 이렇게 간단한 경우에 작동하도록 할 수 있다면 실제 .X25DATAFexport X25DATAF=/home/Bob/X25/DataFilesawkawk

$ cat test1
test1_data
test1a_data
test1b_data

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$ cat /home/Bob/X25/DataFiles/test2
test2_data

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$ cat gettestfiles

1test11 파일에는 3개의 레코드가 있으며 test1_data실행 test1a_datatest1b_data디렉토리와 동일한 디렉토리에 있습니다 .awk

파일에는 test2레코드가 1개만 있으며 디렉터리에 test2_data있습니다 ./home/Bob/X25/DataFiles

awk -F"_" '
FILENAME=="test1" {
  print $1 " " $2
}
FILENAME=="/home/bob/X25/DataFiles/test2" {
print $0
}
END{ }' test1 /home/bob/X25/DataFiles/test2

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$ gettestfiles
test1 data
test1a data
test1b data
test2_data

Bob@Bob-PC ~/X25/Scott/TEST/TEST1

$

관련 정보