awkプログラムでファイル名の一部としてエクスポートされた変数を使用する

awkプログラムでファイル名の一部としてエクスポートされた変数を使用する

私は自分のプロフィールに1つを設定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(ファイル行番号は完全行番号と同じ)が最初のファイルに使用され、2番目のファイル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

または、質問に対するコメントを確認してください。

おすすめ記事