@ Алекс правильно использовал $.
- и это не очень распространенная идиома perl (хотя и полезная, как мы видим), но они неправильно обрабатывали лишние пробелы.
Awk полностью понимает, что такое поля, а затем манипулирует полями, и как часть этого, он выполняет большую часть канонализации пробелов.
Perl, OTOH, обычно не вовлекает себя в разделение полей и многим пользователям нравится делать это самим, но он поддерживает это поведение Awk, используя флаг -a
.
Так что простая реализация описанного выше шума линии Awk может выглядеть так:
perl -anle 'print join("\t",@F) if $. > 1' file.txt
Объяснение:
-a
: инициировать разделение полей с использованием разделителя полей по умолчанию (который хорошо работает в этом случае) или того, что говорит -F
(например, Awk). -n
: итерация по входным строкам (аналогично тому, что делают самые внешние {}
в Awk). Распространенной альтернативой является -p
, который будет означать итерацию по строкам ввода, а затем распечатывать все, что есть в буфере строк после выполнения кода. -l
: при печати добавьте новую строку в конце текста (с такими вещами немного легче работать) -e
: вот сценарий.
Затем мы просто возьмем массив разделенных полей (@F
) и присоединяйся Часто разработчикам нравится просто обращаться к определенным полям с помощью $F[<index>]
, но здесь нам не нужно l oop - мы можем просто взять список как есть и перенаправить его на join()
.