Нам нужен сценарий оболочки, который извлекает все txt-файлы в текущем каталоге и для каждого файла проверяет, является ли он пустым файлом или содержит какие-либо данные в нем (что, я считаю, можно сделать с помощью команды wc).
Если он пуст, игнорируйте его иначе, так как в нашем случае все текстовые файлы в этом каталоге будут либо пустыми, либо содержат огромные данные, в которых последняя строка файла будет выглядеть следующим образом:
Z|11|21||||||||||
То есть последняя строка имеет символ Z
, затем |
, затем an integer
, затем |
, затем an integer
, затем определенное количество символов |
.
Если файл не пустой, томы просто предполагаем, что он имеет этот формат.Данные перед последней строкой искажены и нам не нужны, но перед последней строкой будет как минимум одна строка, т. Е. При непустом файле будет гарантировано как минимум две строки.
Нам нужнокод, в котором, если файл не пустой, он берет файл, заменяет «Z» в последней строке на «filename.txt» и записывает новые данные в другой файл, например, tempfile.Таким образом, последняя строка будет иметь вид:
filename.txt|11|21|||||||
Оставшаяся часть строки остается неизменной.Из временного файла извлекается последняя строка, т.е. filename.txt|int|int|||||
, и объединяется в окончательный файл.Содержимое tempfile очищается для получения данных из следующего filename.txt в том же каталоге.finalfile имеет отредактированную версию последних строк всех непустых текстовых файлов в этом каталоге.
Например: file1.txt имеет данные как
....
....
....
Z|1|1|||||
, а file2.txt имеет данные как
....
....
....
Z|2|34|||||
После запуска скрипта новые данные file1.txt становятся
.....
.....
.....
file1.txt|1|1||||||
. Они будут записаны в новый файл, скажем, temp.txt, который изначально пуст.Оттуда последняя строка объединяется в файл final.txt.Итак, данные в final.txt:
file1.txt|1|1||||||
После этого слияния данные в temp.txt очищаются
Новые данные file2.txt становятся
...
...
...
file2.txt|2|34||||||
Это будет записано в тот же файл temp.txt.Оттуда последняя строка объединяется в тот же файл final.txt.
Итак, данные в final.txt имеют значение
file1.txt|1|1||||||
file2.txt|2|34||||||
После рассмотрения N числа файлов, которые были возвращены, как имеющие типtxt и непустые, и в одном и том же каталоге данные в final.txt становятся
file1.txt|1|1||||||
file2.txt|2|34||||||
file3.txt|8|3||||||
.......
.......
.......
fileN.txt|22|3|||||
Для некоторых условий я уже знаю команду, например
Для поиска файлов в каталогевведите текст,
find <directory> -type f -name "*.txt"
Для того, чтобы взять последнюю строку и объединить ее в другой файл
tail -1 file.txt>>destination.txt