2つの区切り文字でデータを解析しようとしています。

2つの区切り文字でデータを解析しようとしています。

だから私がやろうとしていることは次のとおりです。サンプルCSVを見る:

1,3917,3917,BGP=694|Ethernet=1610|LAG=3,Y

スクリプトを実行した後、出力は次のようになります。

1,3917,3917,BGP=694,Y
1,3917,3917,Ethernet=1610,Y
1,3917,3917,LAG=3,Y

追加の区切り文字を含む元のCSVファイルの1行は、4行目に3つの追加フィールドがあるため、3行に変換されます。

私は一日中これについて研究してきた、これが私が思いついたものです。動作しますか?

パスワード:

 #!/usr/bin/ksh
   if [ $# -ne 1 ];
     then echo "Usage: read.sh filename";
     exit 1;
    fi
   file="$1"
   while read line
     do
       IFS='|'
       set x $line
       while [ a -le #$]
         do
           a=a+1
           echo "`$1`,`$a`"
         done
     done < $1

ベストアンサー1

代わりにAWKを使用してください

この問題は、AWKを使用すると、はるかに簡単に解決できます。私はこれをGNU AWKでテストしました。他のものを使用する場合は、少し調整する必要があります。

#!/usr/bin/gawk -f

BEGIN { FS = "|" }

{
  split( $3, array, /,/ )
  print $1 "," array[2]
  print $1 "," $2 "," array[2]
  print $1 "," $3
}

スクリプトをどこかに保存します(例:解析.awk)実行可能であることを確認してください。その後、CSVファイルまたは標準入力からスクリプトを呼び出して、次の結果を収集できます。

$ echo '1,3917,3917,BGP=694|Ethernet=1610|LAG=3,Y' | parse.awk
1,3917,3917,BGP=694,Y
1,3917,3917,BGP=694,Ethernet=1610,Y
1,3917,3917,BGP=694,LAG=3,Y

おすすめ記事