だから私がやろうとしていることは次のとおりです。サンプル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