1つのファイルを取り、各行を別のファイルで実行されるawkコマンドの文字列として実行するスクリプトを記述しようとしています。これが私がこの時点で持っているものです。
#!/bin/bash
FILE=$1
FILE_TO_SEARCH=$2
exec 4> "FILE_TO_SEARCH"
while read -ru 3 LINE; do
awk -v RS='' -v ORS='\n\n' "$LINE" <&4
done 3< "$FILE"
スクリプトを実行しようとすると、次のようになります。
./bashscript2.sh: line 8: read: read error: 3: Bad file descriptor
検索するファイル(FILE)の例は、次のような内容になります。
hostAbC
host123
host345
hostMos
hostDef
次に、ファイル(FILE_TO_SEARCH)に対してawkコマンドを実行しますが、その内容は以下のようになりますが、さらに多くの点が異なります。
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
id: urn:storageos:Initiator:
clustername = BLAHBLAHBLAH
creationTime = java.util.GregorianCalendar[
time=1490279415811
2017-03-23 14:30:15 811ms UTC
,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=2,WEEK_OF_YEAR=12,WEEK_OF_MONTH=4,DAY_OF_MONTH=23,DAY_OF_YEAR=82,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=30,SECOND=15,MILLISECOND=811,ZONE_OFFSET=0,DST_OFFSET=0]
host = URI:
hostname = hostAbC
inactive = false
ininode = 01:01:01:01:01:01:01:01
iniport = 01:01:01:01:01:01:01:01
internalFlags = 0
isManualCreation = true
label = 01:01:01:01:01:01:01:01
status = OpStatusMap {}
protocol = FC
registrationStatus = REGISTERED
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
id: urn:storageos:Initiator:
clustername = YADAYADAYADA
creationTime = java.util.GregorianCalendar[
time=1485972630239
2017-02-01 18:10:30 239ms UTC
,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2017,MONTH=1,WEEK_OF_YEAR=5,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=32,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=6,HOUR_OF_DAY=18,MINUTE=10,SECOND=30,MILLISECOND=239,ZONE_OFFSET=0,DST_OFFSET=0]
host = URI:
hostname = hostMos
inactive = false
ininode = 01:01:01:01:01:01:01:01
iniport = 01:01:01:01:01:01:01:01
internalFlags = 0
isManualCreation = false
label = 01:01:01:01:01:01:01:01
status = OpStatusMap {}
protocol = FC
registrationStatus = REGISTERED
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
次に、awkコマンドawk -v RS='' -v ORS='\n\n'
はhostAbC
エントリを見つけ、スペースからスペースへの完全なエントリを返します。
どのように機能させるかわかりません。
read
、そこにエラーが発生し、そのエラーも再現できません。(awk
読み取りのために指定されたfdが書き込み用に開かれているため、エラーを投げますが、それはここに投稿したエラーではありません。)