IFS分割の問題

IFS分割の問題

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

おすすめ記事