tail не работает в терминале Mac

Вопрос или проблема

Из-за отсутствия у меня опыта работы со скриптовыми языками (стыд для пользователя 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 может иметь несколько причин, и совсем не обязательно, что сама команда неисправна. В вашем случае, судя по описанию, причина кроется в формате файлов, с которыми вы работаете. Давайте разберёмся по шагам, как решить эту проблему.

Возможные причины и решения:

  1. Формат файла:
    Файлы, которые вы пытаетесь обработать, могут быть в формате Windows (с символами конца строки CRLF вместо LF). Это может привести к тому, что некоторые Unix-утилиты, такие как tail, будут работать некорректно.

    Решение: Используйте утилиту mac2unix, чтобы конвертировать файлы в правильный формат. Например:

    mac2unix *.txt
  2. Проверка прав доступа:
    Убедитесь, что у вас есть необходимые права доступа к файлам. Вы можете проверить их с помощью команды ls -l. Убедитесь, что у вас есть права на чтение для файлов, которые вы хотите обработать.

  3. Команды в терминале:
    Убедитесь, что вы правильно используете синтаксис команд. Напоминаю, что > должно быть заменено на > в терминале. Это важно, так как > – это HTML-код для символа >.

    Пример правильного использования команды tail:

    for f in *.txt; do
       tail -n +2 "$f" >> /path/to/some/dir/with/files/file_name
    done
  4. Проверка содержимого файлов:
    Убедитесь, что в ваших файлах есть содержимое, которое можно просмотреть с помощью tail. Если файлы пустые или содержат недостаточно строк, команда может не выдавать ожидаемый результат.

  5. Использование других утилит:
    Если tail не работает должным образом, вы можете попробовать использовать другие утилиты, такие как sed. Пример команды, которая удаляет первую строку из всех текстовых файлов:

    for file in *.txt; do
       sed '1d' "$file" >> /path/to/some/dir/with/files/file_name
    done
  6. Отладка:
    Чтобы выяснить, в чем может быть проблема, попробуйте выводить строки на экран перед их объединением:

    for f in *.txt; do
       echo "Processing file: $f"
       tail -n +2 "$f"
    done

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...