2014-03-04 6 views
0

У меня есть 1000 файлов в /myfolder, каждый файл ~ 8Mb, и имеет 500K строк и 2 столбцов, как показано ниже:Оптимизировать пасты петли

file1.txt 
Col1 Col2 
a 0.1 
b 0.3 
c 0.2 
... 

file2.txt 
Col1 Col2 
a 0.8 
b 0.9 
c 0.4 
... 

Мне нужно удалить 1-й столбец - Col1 из всех файлов и пасты все файлы бок о бок, порядок файлов не имеет значения.

У меня есть следующий код работает, он работает в течение 4 часов ... В любом случае, чтобы ускорить его?

for i in /myfolder/*; do \ 
paste all.txt <(cut -f2 ${i}) > temp.txt; \ 
mv temp.txt all.txt; \ 
done 

Ожидаемый результат:

all.txt 
Col2 Col2 ... 
0.1 0.8 ... 
0.3 0.9 ... 
0.2 0.4 ... 
... ... ... 
+0

- первый столбец для всех файлов? – Vijay

+0

Да, он одинаковый для всех файлов. – zx8754

ответ

1

Я думаю, что эта задача была бы намного легче, если бы перебирать файлы параллельно. Для каждой строки каждого файла вы просто отсекаете первую часть, а затем распечатываете конкатенацию результатов.

В Python, это было бы что-то вроде

import glob 

# Open all *.txt files in parallel 
files = [open(fn, 'r') for fn in glob.glob('*.txt')] 
while True: 
    # Try reading one line from each file, collecting into 'allLines' 
    try: 
     allLines = [next(f).strip() for f in files] 
    except StopIteration: 
     break 

    # Chop off everything up to (including) the first space for each line 
    secondColumns = (l[l.find(' ') + 1:] for l in allLines) 

    # Print the columns, interspersing space characters 
    print ' '.join(secondColumns) 

Увы, делая allLines генератор, похоже, не работает - next вызов не вызовет ошибку StopIteration по какой-то причине.

0

Я не буду отвечать полностью. Но, возможно, если вы попробуете это, вы можете преуспеть. , например: - Объединение 4 файлов на основе первого столбца:

join -1 1 -2 1 temp1 temp2 | join - temp3|join - temp4 

Таким образом, вы можете написать сценарий изначально обрамляет команду со всеми файлами, и, наконец, выполнить команду. Надеюсь, это полезно.

+0

Предлагаем ли мы, чтобы 'join' был более эффективным, чем' paste'? Кроме того, файлы не сортируются. – zx8754

Смежные вопросы