大容量のテキストファイルをクリーンアップし、区切り文字に基づいて新しい行に分割して処理します。

大容量のテキストファイルをクリーンアップし、区切り文字に基づいて新しい行に分割して処理します。

次のように、複数のディレクトリに同じ名前のテキストファイルがたくさんあります。

"[['master', 'planning', 'occur', 'many', 'scale'], ['age', 'smart', 'city', 'municipal']]"

「[」が新しい行に表示されるたびに「]が表示されるまで、各行を分割する必要があります。

"[['master', 'planning', 'occur', 'many', 'scale']
['age', 'smart', 'city', 'municipal']]"

今、私はすべての特殊文字を削除していくつかのデータクリーンアップを実行したいと思います。

sed s/"'"/""/g m.txt > m1.txt
sed s/'"'/''/g m1.txt > m2.txt
sed s/\]//g m2.txt > m3.txt
sed 's/\[//g' m3.txt > m4.txt
sed s/,//g m4.txt > m5.txt
sed s/\`//g m5.txt > m6.txt
sed 's/\.//g' m6.txt > m7.txt

結果は次のとおりです。

master planning occur many scale age smart city municipal

私が実際に望む結果は次のとおりです。

master planning occur many scale 
age smart city municipal

私の現在の問題は次のとおりです。

  1. すべての行に対してこの分割をどのように実行できますか? (行当[...]構造が何人かはわかりません。
  2. 続くすべてのコマンドをきちんとした小さなスクリプトにまとめることができますか?
sed -e s/"'"/""/g -e s/'"'/''/g -e s/\]//g -e 's/\[//g' -e s/,//g -e s/\`//g -e 's/\.//g' m.txt > m_1.txt 

2人がご利用に適しています! !

ベストアンサー1

これはPerl配列の配列を表すPerl文字列のように見えます。その場合は、次のようにできます。

$ perl -l -0777 -ne '
  eval "\$string = $_";
  eval "\$list = $string";
  print join " ", @{$_} for @$list' your-file
master planning occur many scale
age smart city municipal

それ以外の場合は], [' を改行文字に変更し、すべての[]'`",文字を削除する場合:

$ sed 's/\], \[/\
/g; s/[]["'\''`,]//g' your-file
master planning occur many scale
age smart city municipal

おすすめ記事