Сделайте все файлы в папке длиной до самого длинного файла

#bash #for-loop #awk #sh

Вопрос:

У меня есть много .txt файлов, которые содержат много строк с одним столбцом данных. Однако длина файлов не одинакова. Некоторые файлы содержат 2000 строк, другие-2001 строк и т. Д.

Иногда в конце есть одна пустая строка, которую я хочу удалить.

Я хочу добавить строки 0 в конец всех файлов, кроме самого длинного, чтобы номера строк всех файлов были одинаковыми.

Я бы хотел, чтобы это было решено с помощью простого сценария оболочки.

Комментарии:

1. Вы хотите добавить пустую строку во все файлы, содержащие только 2000 строк?

Ответ №1:

Сначала вы должны найти файл с наибольшим количеством строк. После этого вы можете добавлять строки в другие файлы, пока в них не будет столько строк, сколько в файле с наибольшим количеством строк.

Здесь мы добавляем строки, содержащие текст 0 , пока в файле не будет столько строк, сколько в файле с наибольшим количеством строк.

Чтобы сначала удалить пустую строку в конце, вы можете использовать sed :

 sed -i '${/^$/d}' /home/kisa/data/*.txt
max=$(wc -l /home/kisa/data/*.txt | head -n-1 | sort -n | awk 'END {print $1}')
for f in /home/kisa/data/*.txt; do
  n=$(wc -l < "$f")
  yes 0 | head -n $((max-n)) >> "$f"
done