Вопрос или проблема
Из-за отсутствия у меня опыта работы со скриптовыми языками (стыд для пользователя Mac) я обратился к нескольким источникам:
ссылка казалась решенной с помощью ls *.extension | xargs -n 1 tail -n +2
Это не сработало для меня, даже после добавления > merged.txt
в конце,
также не сработал следующий код:
for f in *.txt
do
tail -n +2 $f >> /path/to/some/dir/with/files/file_name
done
Я также попробовал sed -e'1d' $FILE
в замене команды tail. Не сработало.
tail -n +2 file_name.extension
, cat LIN_1994-11_0100.txt | tail -n +2
,
awk 'FNR != 1' *.extension
не оказали никакого эффекта на файл.
Я не уверен, связано ли это с текущей проблемой.
Или относится ли ссылка к этой проблеме.
Если кто-то сможет выяснить причину этой проблемы или найти выход из нее… буду очень благодарен. Я перенес эту проблему из другого сообщества сюда, чтобы получить больше информации, если смогу.
Утверждение о том, что tail
не работает на Mac, неверно, как показано (переносы строк и отступы добавлены к циклам for
для ясности):
$ for i in {1..3}; do
for file in foo bar; do
echo "$i $file" >> $file
done
done
$ paste foo bar
1 foo 1 bar
2 foo 2 bar
3 foo 3 bar
$ tail -n+2 -q * > output
$ cat output
2 bar
3 bar
2 foo
3 foo
$ uname -a
Darwin recacted-hostname 17.2.0 Darwin Kernel Version 17.2.0: Fri Sep 29 18:27:05 PDT 2017; root:xnu-4570.20.62~3/RELEASE_X86_64 x86_64
Ответ изначально найден в редактировании самого вопроса:
Проблема была в формате файла!! mac2unix
изменил файлы так, что команда tail
заработала! И ссылка для тех, кто может столкнуться с такой же проблемой в будущем. Спасибо всем за интерес и участие!
Ответ или решение
Проблема с использованием команды tail
в терминале macOS может иметь несколько причин, и совсем не обязательно, что сама команда неисправна. В вашем случае, судя по описанию, причина кроется в формате файлов, с которыми вы работаете. Давайте разберёмся по шагам, как решить эту проблему.
Возможные причины и решения:
-
Формат файла:
Файлы, которые вы пытаетесь обработать, могут быть в формате Windows (с символами конца строки CRLF вместо LF). Это может привести к тому, что некоторые Unix-утилиты, такие какtail
, будут работать некорректно.Решение: Используйте утилиту
mac2unix
, чтобы конвертировать файлы в правильный формат. Например:mac2unix *.txt
-
Проверка прав доступа:
Убедитесь, что у вас есть необходимые права доступа к файлам. Вы можете проверить их с помощью командыls -l
. Убедитесь, что у вас есть права на чтение для файлов, которые вы хотите обработать. -
Команды в терминале:
Убедитесь, что вы правильно используете синтаксис команд. Напоминаю, что>
должно быть заменено на>
в терминале. Это важно, так как>
– это HTML-код для символа>
.Пример правильного использования команды
tail
:for f in *.txt; do tail -n +2 "$f" >> /path/to/some/dir/with/files/file_name done
-
Проверка содержимого файлов:
Убедитесь, что в ваших файлах есть содержимое, которое можно просмотреть с помощьюtail
. Если файлы пустые или содержат недостаточно строк, команда может не выдавать ожидаемый результат. -
Использование других утилит:
Еслиtail
не работает должным образом, вы можете попробовать использовать другие утилиты, такие какsed
. Пример команды, которая удаляет первую строку из всех текстовых файлов:for file in *.txt; do sed '1d' "$file" >> /path/to/some/dir/with/files/file_name done
-
Отладка:
Чтобы выяснить, в чем может быть проблема, попробуйте выводить строки на экран перед их объединением:for f in *.txt; do echo "Processing file: $f" tail -n +2 "$f" done
Заключение
Основная проблема, с которой вы столкнулись, скорее всего, связана с форматом файла. Применение утилиты mac2unix
должно помочь улучшить совместимость. Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь задавать их.