Bash シェルスクリプトの先頭に次の行を使用します。
IFS=':#:'
ただし、フィールドを区別するために、:#:を使用せずにコロンのみを使用します。質問がありますか?
編集する:
これはテキストファイルの私のデータです。
f:#:0
c:#:Test C
s:#:test S
ctype:#:0
a:#:test A
t:#:10:02:03
r:#:test r
f:#:0
c:#:Test C1
s:#:test S1
ctype:#:1
a:#:test A1
t:#:00:02:22
r:#:test r
f:#:20
c:#:Test C
s:#:test S
ctype:#:2
a:#:test A1
t:#:00:02:03
r:#:test r
...次のコードを使用して読みます。
IFS=':#:'
while read -r key value; do
.....
done < "$FileName"
ベストアンサー1
@heemaylが指摘したように、問題はIFSが文字列全体を区切り文字として扱うのではなく、各文字を別々の区切り文字として扱うことです。awk
ただし、文字列を区切り文字として使用できます。
たとえば、
#!/bin/bash
while read -r key value
do
printf 'key %-7s val %s\n' "$key" "$value"
done < <(awk -F ':#:' '{print $1" "$2}' $FileName )
key f val 0
key c val Test C
key s val test S
key ctype val 0
key a val test A
key t val 10:02:03
key r val test r
key val
key f val 0
key c val Test C1
key s val test S1
key ctype val 1
key a val test A1
key t val 00:02:22
key r val test r
key val
key f val 20
key c val Test C
key s val test S
key ctype val 2
key a val test A1
key t val 00:02:03
key r val test r