私は自分のプロフィールに1つを設定export X25DATAF=/home/Bob/X25/Datafiles
し、これが私がやっていることですecho $X25DATAF
。
/home/Bob/X25/Datafiles
以下の内容をプログラムの2つの場所に変更したいと思います。ただし、動作させることはできません(例:)。そうすれば、私がしなければならないのは、このプログラムを実行しているシステム(および他の同様のプログラム)のパスへのパスを設定することだけです。awk
$X25DATAF
awk
$X25DATAF/ALL_SW_DB.txt
export
awk
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
または、質問に対するコメントを確認してください。
答え2
以下はより簡単な例です。私のプロフィールで2つのインスタンスを()エクスポートに/home/Bob/X25/DataFiles
置き換えたいと思います。このような単純な場合に動作することができれば実際の 。X25DATAF
export X25DATAF=/home/Bob/X25/DataFiles
awk
awk
$ 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_data
されたtest1b_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
$