2017-02-13 30 views
-1

У меня есть сотни больших текстовых файлов, fileAn и fileBn, в двух папках A и B, из которых я хотел бы поменять первые шесть столбцов каждого файла. Затем я сохранил бы новые файлы fileCn и fileDn в папках C и D. Существует равное количество файлов в A и B, а длина файлов идентична.Обмен текстовыми файлами и создание нового файла

Как это можно сделать с помощью bash или regex?

Вот отрывок из fileA1:

"2015-11-11 00:00:00.00",59841,0.327,3.275,1.89275,32.048,8,32,11.61 
"2015-11-11 00:00:00.10",59842,0.086,3.56975,2.20325,32.10205,9,32,11.57 
"2015-11-11 00:00:00.20",59843,0.26575,3.343,1.8285,32.06717,10,32,11.57 
"2015-11-11 00:00:00.30",59844,-0.1915,3.28175,1.793,32.12122,11,32,11.57 

fileB1:

"2015-11-11 00:00:00.00",59841,2.48975,2.8535,-0.6575,32.13168,9 
"2015-11-11 00:00:00.10",59842,2.38975,3.10525,-0.62025,32.21362,10 
"2015-11-11 00:00:00.20",59843,2.224,3.09825,-0.43375,32.19968,11 
"2015-11-11 00:00:00.30",59844,2.102,3.029,-0.51825,32.21539,12 

Новый файл fileC1, первые шесть колонок fileB1 заменены на первые шесть колонн из fileA1:

"2015-11-11 00:00:00.00",59841,0.327,3.275,1.89275,32.048,9 
"2015-11-11 00:00:00.10",59842,0.086,3.56975,2.20325,32.10205,10 
"2015-11-11 00:00:00.20",59843,0.26575,3.343,1.8285,32.06717,11 
"2015-11-11 00:00:00.30",59844,-0.1915,3.28175,1.793,32.12122,12 

Новый файл fileD1, первые шесть колонок fileA1 заменены на первые шесть колонн из fileB1:

"2015-11-11 00:00:00.00",59841,2.48975,2.8535,-0.6575,32.13168,8,32,11.61 
"2015-11-11 00:00:00.10",59842,2.38975,3.10525,-0.62025,32.21362,9,32,11.57 
"2015-11-11 00:00:00.20",59843,2.224,3.09825,-0.43375,32.19968,10,32,11.57 
"2015-11-11 00:00:00.30",59844,2.102,3.029,-0.51825,32.21539,11,32,11.57 

Я посмотрел на команду paste, но не мог найти способ сделать это периодический процесс.

+1

Вы также можете попробовать использовать 'cut'? –

+0

только 'paste -d, <(cut fileA1 -d, -f1-6) <(вырезать файлB1 -d, -f7)> fileC1' и' paste -d, <(вырезать файлB1 -d, -f1-6) <(cut файлA1 -d, -f7-9)> файлD1' –

+0

@JoseRicardoBustosM. Благодарю. Я тестировал это на одном файле, и он работал. Я пытаюсь применить это рекурсивно для большого количества файлов, используя * fileA1 = find/path/to/folderA -name '* .csv' * и file * fileB1 = find/path/to/folderB -name '*. csv '*, но я получаю синтаксическую ошибку, когда я применяю это к команде * paste *. – Buzz

ответ

0

Вы можете использовать paste и cut для поменяв столбцов в двух файлах,

paste -d, <(cut fileA1 -d, -f1-6) <(cut fileB1 -d, -f7) > fileC1 
paste -d, <(cut fileB1 -d, -f1-6) <(cut fileA1 -d, -f7-9) > fileD1