Слияние текстовых файлов рядом друг с другом

У меня есть .txt данные спектрометра с 800 линиями и 5 столбцами. И я хочу объединить около 15 этих файлов рядом друг с другом. Таким образом, окончательный файл .txt должен содержать 800 строк и 75 столбцов.

Все файлы .txt выглядят так:

Wave ;Sample ;Dark ;Reference;Absorbance [nm] ;[counts] ;[counts] ;[counts] ;[A.U] 200.00; 34.647; -0.317; 79.668; 0.35734 201.00; 29.937; -21.220; 70.385; 0.25357 202.00; 48.826; -0.527; 99.657; 0.30721 203.00; 43.201; 4.165; 136.775; 0.53103 ...

Желаемый файл:

Wave ;Sample ;Dark ;Reference;Absorbance; Wave ;Sample ;Dark ;Reference;Absorbance [nm] ;[counts] ;[counts] ;[counts] ;[A.U]; [nm] ;[counts] ;[counts] ;[counts] ;[A.U] 200.00; 34.647; -0.317; 79.668; 0.35734; 200.00; 34.647; -0.317; 79.668; 0.35734; 201.00; 29.937; -21.220; 70.385; 0.25357; 201.00; 29.937; -21.220; 70.385; 0.25357 202.00; 48.826; -0.527; 99.657; 0.30721; 202.00; 48.826; -0.527; 99.657; 0.30721 203.00; 43.201; 4.165; 136.775; 0.53103; 203.00; 43.201; 4.165; 136.775; 0.53103

Я попытался:

cat *.txt > file.txt

Но это добавляет файлы .txt, такие как новые строки, не похожие на новые столбцы.

1
задан 10 March 2018 в 04:44

4 ответа

Вы ищете утилиту paste, например

paste *.txt > file.txt

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

4
ответ дан 17 July 2018 в 19:13

Простой пример

Я установил разделитель в «пробел» и устранил несколько пробелов.

$ cat file-1 ett tu tre 1 2 3 11 22 33 $ cat file-2 fyra fem sex 4 5 6 44 55 66 $ cat file-3 sju atta nio 7 8 9 77 88 99 $ paste file-? ett tu tre fyra fem sex sju atta nio 1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99 $ paste -d ' ' file-? ett tu tre fyra fem sex sju atta nio 1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99 $ paste -d ' ' file-? | tr -s ' ' ' ' ett tu tre fyra fem sex sju atta nio 1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99

Рекомендуемая командная строка

Возможно, вы хотите устранить пространства? Вы хотите сохранить точку с запятой как разделитель. Попробуйте использовать следующую командную строку

paste -d ';' input-filespec-with-wildcard | sed 's/ //g' > output-file

, где input-filespec-with-wildcard может быть *.txt (если файлы, которые должны быть объединены, являются единственными txt файлами в каталоге).

Редактировать (используя реальные данные)

Преобразовать файлы в текстовый формат unix / linux, CarriageReturn + LineFeed -> LineFeed с помощью dos2unix Удалить пустые строки со следующей командой for i in *.TXT;do echo sed '/^$/'d "$i" > "${i/.TXT/.txt}";done Удалить заголовок строки с следующей командой for i in *.txt;do grep ';*;' "$i" > "${i/.txt/.txt1}";done (строки заголовка не содержат по крайней мере двух точек с запятой). Объедините файлы со следующей командой paste -d ';' *.txt1 | sed 's/ //g' > merged-file.txt

Я прочитал объединенный файл в LibreOffice Calc и использовал точку с запятой как разделитель , Похоже, я думаю, что ты хочешь это получить. Надеюсь, это сработает для вас в соответствии с этими инструкциями. В противном случае опишите оставшуюся проблему и скажите мне, хотите ли вы загрузить «мой» merged-file.txt.

LibreOffice Calc

Если вы хотите сделать это только один раз, вы можете сделать вручную / визуально в Libre Office Calc, вставив файлы в электронную таблицу. Вы можете редактировать позиции в электронной таблице и удалять строки, которые создают путаницу.

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

3
ответ дан 17 July 2018 в 19:13

Вы ищете утилиту paste, например

paste *.txt > file.txt

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

4
ответ дан 23 July 2018 в 19:59
  • 1
    Я, наверное, ища sdiff. Но я не знаю, какой вариант использовать. Каждый файл должен быть разделен символом "; & quot; но есть «вкладка». – Adam Srut 9 March 2018 в 14:15
  • 2
    @AdamSrut, пожалуйста, объясните с гораздо более подробной информацией, что вы хотите! Измените исходный вопрос, чтобы добавить эти данные. – sudodus 9 March 2018 в 20:44
  • 3
    извините sdiff работает только на двух файлах ... Я редактировал свой вопрос. – Adam Srut 9 March 2018 в 21:45

Простой пример

Я установил разделитель в «пробел» и устранил несколько пробелов.

$ cat file-1 ett tu tre 1 2 3 11 22 33 $ cat file-2 fyra fem sex 4 5 6 44 55 66 $ cat file-3 sju atta nio 7 8 9 77 88 99 $ paste file-? ett tu tre fyra fem sex sju atta nio 1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99 $ paste -d ' ' file-? ett tu tre fyra fem sex sju atta nio 1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99 $ paste -d ' ' file-? | tr -s ' ' ' ' ett tu tre fyra fem sex sju atta nio 1 2 3 4 5 6 7 8 9 11 22 33 44 55 66 77 88 99

Рекомендуемая командная строка

Возможно, вы хотите устранить пространства? Вы хотите сохранить точку с запятой как разделитель. Попробуйте использовать следующую командную строку

paste -d ';' input-filespec-with-wildcard | sed 's/ //g' > output-file

, где input-filespec-with-wildcard может быть *.txt (если файлы, которые должны быть объединены, являются единственными txt файлами в каталоге).

Редактировать (используя реальные данные)

Преобразовать файлы в текстовый формат unix / linux, CarriageReturn + LineFeed -> LineFeed с помощью dos2unix Удалить пустые строки со следующей командой for i in *.TXT;do echo sed '/^$/'d "$i" > "${i/.TXT/.txt}";done Удалить заголовок строки с следующей командой for i in *.txt;do grep ';*;' "$i" > "${i/.txt/.txt1}";done (строки заголовка не содержат по крайней мере двух точек с запятой). Объедините файлы со следующей командой paste -d ';' *.txt1 | sed 's/ //g' > merged-file.txt

Я прочитал объединенный файл в LibreOffice Calc и использовал точку с запятой как разделитель , Похоже, я думаю, что ты хочешь это получить. Надеюсь, это сработает для вас в соответствии с этими инструкциями. В противном случае опишите оставшуюся проблему и скажите мне, хотите ли вы загрузить «мой» merged-file.txt.

LibreOffice Calc

Если вы хотите сделать это только один раз, вы можете сделать вручную / визуально в Libre Office Calc, вставив файлы в электронную таблицу. Вы можете редактировать позиции в электронной таблице и удалять строки, которые создают путаницу.

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

3
ответ дан 23 July 2018 в 19:59
  • 1
    Это почти все! Но в результате получается строка из каждого файла по строке из предыдущего файла. Поэтому я попытался устранить конец строк & quot; \ n & quot; и я печатаю | sed 's / \ n // g', но это не работает. – Adam Srut 13 March 2018 в 01:38
  • 2
    Вы можете попробовать tr '\n' ';' преобразовать нежелательные символы перевода строки в точку с запятой (которую вы используете в качестве разделителей). Но он удалит все новые строки, и это, вероятно, не то, что вы хотите. Если у вас пустые строки (две новые строки рядом друг с другом), вы можете попробовать sed '/^$/'d, где ^ отмечает начало строки, а $ обозначает конец строки, а d сообщает sed, чтобы удалить строку (пустую строку). – sudodus 13 March 2018 в 11:06
  • 3
    Но я угадываю. Вы можете облегчить вам помощь, если вы загрузите некоторые из реальных файлов , которые вы хотите объединить, и разместите ссылку на них. Тогда я могу разработать метод, который работает для реального случая. (Если файлы секретны, я могу предоставить вам свой открытый ключ для шифрования gpg, чтобы вы могли сделать их доступными для чтения только для меня.) – sudodus 13 March 2018 в 11:12
  • 4
    Да, я понимаю. Вот ссылка на файлы & lt; vscht-my.sharepoint.com/:f:/g/personal/sruta_vscht_cz/… ; – Adam Srut 13 March 2018 в 12:33
  • 5
    @AdamSrut, взгляните на то, что я считаю рабочим решением. – sudodus 13 March 2018 в 15:02

Другие вопросы по тегам:

Похожие вопросы: