Как сказал @KamilCuk в комментарии, это происходит потому, что head -10
читает только первые 10 строк из конвейера (плюс, возможно, некоторую буферизацию ввода), а затем закрывает его;если входное значение достаточно велико, это происходит до того, как sed
записал все в канал (а буфер канала недостаточно велик, чтобы поглотить лишнее).Так что, произойдет это или нет, зависит от размера входного файла, ОС и его параметров (которые определяют характеристики канала), поведения sed
при падении выходного сигнала и т. Д. Простого изменения немного может быть достаточно, чтобы избежатьпроблема, например:
...sort -nr | tr -d '"' | head -10 # use `tr` instead of `sed` -- it may behave differently
...sort -nr | head -10 | sed 's/"//g' # swap `head` and `sed` -- now `sort`'s output is dropped
И вот что позволит избежать ошибки:
...sort -nr | sed '11,$ d; s/"//g'
То, как это работает, говорит sed
отказатьсястроки 11 до конца ввода ("$"), но так как они отбрасывают их после чтения их (а не чтения их вообще, как head -10
), sort
в целомвыходные данные считываются и ошибки не возникает.
Кстати, как указывал @triplee, использование cat
в начале конвейера бесполезно;Вы должны awk
прочитать файл напрямую, например:
awk '{print $1, $6}' input.txt | ...