次の情報のリストを含むファイルがあります。
#FILENAME "Some name - some title.xml"
<song>some song</song>
<year>1994.</year>
<album>Some album</album>
<artist>some artist</artist>
#FILENAME "another filename - some have ' in title title.xml"
<song>another song</song>
<year>1996.</year>
<album>another album</album>
<artist>another artist</artist>
#FILENAME "yet another filename - something.xml"
...
..
.
25,000行を超える場合は別々のファイル(5000ファイルfiles.xml)を作成する必要があるため、最初の行はFILENAMEで、2行目から5行目はxmlファイルのフィールドになる必要がある情報です。
<?xml version='1.0' encoding='UTF-8'?><Metadata> <artist></artist> <song></song> <album></album> <year></year></Metadata>
誰かがスクリプトを書くのに役立ちますか?
これまで、ドキュメントから#form FILENAMEを削除し、次の操作を行いました。
しかし、複数のファイルを作成することはできません
#!/bin/bash
while read line;
if [[ $line == FILENAME* ]]; then
filename="${line:9}"
fi
if [[ $line == *artist* ]]; then
artist=$line
fi
if [[ $line == *song* ]]; then
song=$line
fi
if [[ $line == *album* ]]; then
album=$line
fi
if [[ $line == *year* ]]; then
year=$line
fi
do
echo "<?xml version='1.0' encoding='UTF-8'?><Metadata> $artist $song $album $year</Metadata>"
done < popis.txt > $filename
ベストアンサー1
次のコマンドを使用して、ファイルを
popis.txt
5000を超える一時ファイルに分割できます。分ける (GNU coreutils) コマンド:split -d -a4 -l5 popis.txt split
split0001
これにより、それぞれ5行を含む、、、...ファイルが生成され、さらにsplit0002
処理が容易になります。変更されたスクリプトを作成し、次の名前で保存します
script.sh
。#!/bin/bash for file; do while read -r line; do if [[ "$line" = "<artist>"* ]]; then artist=$line elif [[ "$line" = "<song>"* ]]; then song=$line elif [[ "$line" = "<album>"* ]]; then album=$line elif [[ "$line" = "<year>"* ]]; then year=$line else # remove prefix `#FILENAME "` and the last quote `"` filename=$(echo "$line" | sed 's/[^"]*"//;s/"[[:space:]]*$//') fi done < "$file" echo "<?xml version='1.0' encoding='UTF-8'?><Metadata>${artist}${song}${album}${year}</Metadata>" > "$filename" done
splitXXXX
スクリプトを実行可能にし、すべてのファイルで実行します。chmod +x script.sh ./script.sh split*
すべてが順調に進むと、各入力ファイルごとにXMLファイルを生成し、一時ファイルを削除できます。
rm split*