Об’єднайте текстові файли поруч


2

У мене є .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файли як нові рядки, а не нові колонки.


2
Додайте кілька прикладних вхідних файлів та бажаний вихід із них.
heemayl

1
Якщо ви хочете зробити це лише один раз, ви можете це зробити вручну / візуально в Libre Office Calc, вставивши файли в електронну таблицю.
sudodus

Відповіді:


5

Ви шукаєте pasteутиліту, наприклад

paste *.txt > file.txt

Перегляньте його сторінку керівництва для отримання детальної інформації, особливо це -dозначає, щоб вказати роздільник.


Я, мабуть, шукаю sdiff. Але я не знаю, який варіант використовувати. Кожен файл має бути обмежений символом ";" але є "вкладка |".
Juicce

@AdamSrut, поясніть, будь ласка, набагато більше деталей, що ви хочете! Відредагуйте своє оригінальне запитання, щоб додати ці дані.
sudodus

шкода sdiff працює лише у двох файлах ... Я відредагував своє запитання.
Juicce

4

Простий приклад

Я встановлюю роздільник на "пробіл" і усуваю декілька пробілів.

$ 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, але якщо це те, що ви будете робити багато разів або з великою кількістю файлів, краще використовувати і, можливо, вдосконалити метод командного рядка.


Це майже все! Але в результаті я отримую рядок з кожного файла під рядком з попереднього файлу. Тому я спробував усунути кінець рядків "\ n" і набрав | sed 's / \ n // g', але це не працює.
Juicce

Ви можете спробувати tr '\n' ';'перетворити небажані нові рядки в крапки з комою (які ви використовуєте як роздільники). Але це видалить усі нові рядки, і це, мабуть, не те, що ви хочете. Якщо у вас є порожні рядки (два нові рядки поруч), ви можете спробувати, sed '/^$/'dде ^ позначає початок рядка, а $ позначає кінець рядка, а d повідомляє sed видалити рядок (порожній рядок).
sudodus

Але я здогадуюсь Ви можете полегшити допомогу, якщо ви завантажите деякі реальні файли , які потрібно об'єднати, та опублікуйте посилання на них. Тоді я можу розробити метод, який працює в реальному випадку. (Якщо файли є секретними, я можу надати вам свій відкритий ключ для шифрування gpg, щоб ви могли зробити їх читабельними лише для мене.)
sudodus

Так я розумію. Ось посилання на файли < vscht-my.sharepoint.com/:f:/g/personal/sruta_vscht_cz/… >
Juicce

@AdamSrut, Поглянь на те, що, на мою думку, є робочим рішенням.
sudodus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.