Как manatwork уже прокомментировал, %
не часть вывода от awk, это - следующая подсказка от оболочки. В END
блок, для этого входного файла, существует три вызова к printf
. Первые выводы 6
и пространство, вторые выводы 7
и пространство и третьи выводы 10
и пространство. После этого awk выходы и оболочка печатает ее подсказку.
Если команда распечатает некоторый вывод, который не заканчивается в новой строке (или, в более общем плане, если это не оставит курсор в начале строки), то в зависимости от конфигурации Вашей оболочки, оболочка или распечатает свою подсказку после вывода команды на той же строке, или оболочка могла бы стереть незавершенную строку и распечатать ее подсказку в начале строки.
Для проверки вывод команды полностью видим, удостоверьтесь, что он заканчивается в новой строке (если команда не производит вывода, конечно). В системах Unix непустой текстовый файл всегда заканчивается новой строкой, потому что текстовые файлы состоят из (возможно пустой) серия строк, каждая из которых состоит из (возможно пустой) серия символов кроме новой строки (и пустые байты). Большинство утилит имеет тенденцию быть разработанным для контакта, прежде всего, с текстовыми файлами, поэтому удостоверьтесь, что вывод команды является допустимым текстовым файлом.
После печати полей распечатайте a "\n"
(awk нотация для символа новой строки), или вызов print
функция, которая добавляет новую строку после печатаемого текста.
END { for (i=1; i<=NF; i++) printf "%d ", sum[i]; print ""; }
или, чтобы не иметь дополнительное пространство в конце строки:
END { for (i=1; i
или
END { printf "%d"; for (i=2; i<=NF; i++) printf " %d", sum[i]; print ""; }
или
END { for (i=1; i
Предположим, что в переменной FILE1_SZ
имеется размер файла -c
и ваша реализация head
поддерживает (нестандартную) -c
опцию:
if head -c "$FILE1_SZ" file2 | cmp -s - file1; then
echo "file1 is a prefix of file2"
else
echo "file1 is not a prefix of file2"
fi
Если в вашей системе используется команда cmp
от GNU diffutils
, то один из вариантов -
cmp -n 124665 file1 file2
сравнить максимум первые 124665 байт двух файлов и сообщить, различаются ли они - или, в более общем плане,
cmp -n "$(wc -c < file1)" file1 file2
GNU cmp
может решить проблему более простым способом:
cmp file1 file2
Существует четыре возможных выхода (исключающих какую-либо ошибку).
Нет выхода: файлы идентичны.
cmp: EOF на file1
: file1 является префиксом file2.
cmp: EOF на file2
: file2 - префикс файла1.
file1 file2 отличается: байт NNN, строка MMM
: Ни один из них не является префиксом другого.
К сожалению, это немного неудобно использовать в скрипте, так как эти случаи, похоже, не выделяются в коде выхода. Более того, сообщения EOF на file1
идут в stderr, а сообщение file1 file2 отличается
идут в stdout.
Я полагаю, что другие версии cmp
делают что-то подобное, но я не проверял.