0

大きなテキスト ファイルを含むフォルダがあります。各ファイルは、[[ファイル名]]で区切られた 1000 個のファイルのコレクションです。ファイルを分割して 1000 個のファイルを作成し、それらを新しいフォルダーに入れたいと考えています。bashでそれを行う方法はありますか?他の高速な方法でも構いません。

for f in $(find . -name '*.txt')
do mkdir $f
  mv 
  cd $f
  awk '/[[.*]]/{g++} { print $0 > g".txt"}' $f
  cd ..
done 
4

3 に答える 3

0

既存のファイルと同じ名前のフォルダーを作成しようとしています。

for f in $(find . -name '*.txt')
do mkdir $f

ここで、「検索」は現在のパスにあるファイルを一覧表示し、これらのファイルごとに、まったく同じ名前のディレクトリを作成しようとします。それを行う 1 つの方法は、最初に一時フォルダーを作成することです。

for f in $(find . -name '*.txt')
do mkdir temporary # create a temporary folder
  mv $f temporary # move the file into the folder
  mv temporary $f # rename the temporary folder to the name of the file
  cd $f # enter the folder and go on....
  awk '/[[.*]]/{g++} { print $0 > g".txt"}' $f
  cd ..
done 

すべてのフォルダに「.txt」拡張子が付くことに注意してください。そうしたくない場合は、フォルダを作成する前に切り取ることができます。そうすれば、作成しようとしているフォルダーの名前が .txt ファイルとは異なるため、一時フォルダーは必要ありません。例:

for f in $(find . -name '*.txt' | rev | cut -b 5- | rev)
于 2013-04-22T19:56:59.263 に答える
0

酔っ払った人が書いたり書いたりしたわけではありませんが、動作することは保証されていません。

import re
import sys


def main():
    pattern = re.compile(r'\[\[(.+)]]')
    with open (sys.argv[1]) as f:
        for line in f:
            m = re.search(pattern, line)
            if m:
                try:
                    with open(fname, 'w+') as g:
                        g.writelines(lines)
                except NameError:
                    pass
                fname = m.group(1)
                lines = []
            else:
                lines.append(line)

    with open(fname, 'w+') as g:
        g.writelines(lines)

if __name__ == '__main__':
    main()
于 2013-04-22T19:35:55.497 に答える