#bash #xargs
#bash #xargs
Вопрос:
Я пытаюсь написать команду, которая берет случайную строку из CSV и выводит эту строку минус 5. Скажем, она выводит строку 50, затем она должна печатать от 46 до 50, оба включены. Я могу добиться этого в два этапа, однако при попытке использовать «xargs» для передачи номера строки следующей команде (head -n) я получил сообщение об ошибке: "head: invalid number of lines: ‘{}’"
. Моя команда:
cat test.csv | awk '{ print NR }' | shuf -n 1 | xargs -l head -n "{}" test.csv | tail -n 5
Где "xargs -l head -n "{}" test.csv"
следует собрать число из "shuf"
функции, а затем свести его к 5, чтобы захватить последние 5 строк.
Что я делаю не так?
Спасибо
Ответ №1:
Цитирую справочную страницу xargs:
-Я заменяю-str
Замените вхождения replace-str в начальных аргументах именами, считанными из стандартного ввода. Кроме того, пробелы без кавычек не завершают входные элементы; вместо этого разделителем является символ новой строки. Подразумевает -x и -L 1 .
Как вы можете видеть, флаг -I необходим, чтобы указать строку замены для вашей команды.
Без указанной строки xargs просто добавит значение каждой строки в конец вашей команды. Итак, должно работать следующее:
cat test.csv | awk '{ print NR }' | shuf -n 1 | xargs -I {} head -n "{}" test.csv | tail -n 5