У меня есть .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, такие как новые строки, не похожие на новые столбцы.
Вы ищете утилиту paste, например
paste *.txt > file.txt
Для получения подробных сведений проверьте его страницу руководства, прежде всего параметр -d, чтобы указать разделитель.
Я установил разделитель в «пробел» и устранил несколько пробелов.
$ 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 файлами в каталоге).
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.
Если вы хотите сделать это только один раз, вы можете сделать вручную / визуально в Libre Office Calc, вставив файлы в электронную таблицу. Вы можете редактировать позиции в электронной таблице и удалять строки, которые создают путаницу.
Я бы сказал, что это довольно просто сделать в LibreOffice Calc вручную, но если это то, что вы сделаете раз или с большим количеством файлов, лучше использовать и, возможно, усовершенствовать метод командной строки.
Вы ищете утилиту paste, например
paste *.txt > file.txt
Для получения подробных сведений проверьте его страницу руководства, прежде всего параметр -d, чтобы указать разделитель.
Я установил разделитель в «пробел» и устранил несколько пробелов.
$ 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 файлами в каталоге).
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.
Если вы хотите сделать это только один раз, вы можете сделать вручную / визуально в Libre Office Calc, вставив файлы в электронную таблицу. Вы можете редактировать позиции в электронной таблице и удалять строки, которые создают путаницу.
Я бы сказал, что это довольно просто сделать в LibreOffice Calc вручную, но если это то, что вы сделаете раз или с большим количеством файлов, лучше использовать и, возможно, усовершенствовать метод командной строки.