почему `awk` терпит неудачу, когда я помещаю его в сценарий bash

в строке:

ls | awk '{printf("%s\t\t%s\n", $9, $3);}' 

преуспевает в печати того, что предполагается печатать. Если я помещаю его в файл, я получаю четыре или пять пустых строк (о числе строк в выводе ls ):

 $ cat awk-file-owner-simple #!/bin/bash ls | awk '{printf("%s\t\t%s\n", $9, $3);}' $ ./awk-file-owner-simple _ _ _ _ 

Где _ стоять за пустые строки (которые не могут быть отображены с использованием форматирования кода stackexchange).

Изменить ls | к ls -l | ,

Вы явно наложили ls на ls -l в своей оболочке (возможно, на функцию и / или другие параметры); используйте type ls чтобы узнать, что вы на самом деле выполняете. Сценарии не получают псевдонимов, поэтому он просто запускает нормальный ls с его единственным столбцом вывода.

Или используйте stat (1) из пакета coreutils.

 stat --printf="%-20n %U\n" *