Объедините текстовые файлы друг рядом с другом

Я имею .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
задан 10 March 2018 в 03:44

2 ответа

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

paste *.txt > file.txt

Проверьте его страницу руководства на детали, прежде всего -d опция указать разделитель.

5
ответ дан 2 December 2019 в 01:29

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

Я установил разделитель, чтобы 'расположить с интервалами' и устранить несколько пробелов.

$ 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

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

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

4
ответ дан 2 December 2019 в 01:29

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

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