Как передать содержимое файла параметру / параметру функции

У меня есть набор пар .txt файлов. В каждой паре файлов File1 содержит одно целое число, а File2 содержит много строк текста. В сценарии, который я пишу, я хотел бы использовать целое число в File1, чтобы указать, сколько строк должно удалить верхнюю часть File2, а затем записать эти строки в другой файл. Я использую gnu-parallel для параллельной работы с несколькими парами файлов.

Похоже, что простой способ сделать это – передать содержимое файла File1 в качестве параметра для опции -n head – возможно ли это? Я пробовал использовать xargs и cat File1 , но ни один из них не работает.

Пример файла-пары:

 File1: 2 File2: AAA BBB CCC DDD 

Желаемый результат:

 File3: AAA BBB 

Если я не использовал gnu-parallel, я мог бы назначить содержимое File1 переменной (хотя я не знаю, могу ли я передать это в опцию -n head ?); однако параллель {} похоже, усложняет этот подход.

При необходимости я могу предоставить дополнительную информацию.

2 Solutions collect form web for “Как передать содержимое файла параметру / параметру функции”

Ответ на вопрос Жиля:

 parallel 'head -n "$(cat {1})" {2}' ::: File1s* :::+ Corresponding_File2s* 

Вероятно, у вас есть много файлов File1s, которые вы хотите связать с File2s. Это делает ::: +.

Используйте подстановку команд .

 head -n "$(cat File1)" File2 

Подстановка команды вводит вывод команды в командную строку. Новые строки в конце вывода удаляются, что вам и нужно здесь.

Кроме того, в bash (но не в других вариантах sh) вы можете использовать встроенный файл mapfile для загрузки файла по mapfile .

 mapfile lines <File1 head -n "${lines[0]}" File2 

Строки загружаются в массив, поэтому номер строки n равен ${lines[ n ]} . Для первой строки bash также позволяет писать $line .

  • Shell Script: используйте «find» для запуска оболочки команду, содержащую «имя файла» (без расширения), возвращенную из «find»,
  • Проблема с изменением размера и stty на удаленном скрипте ssh?
  • Как получить PID подпроцесса через родительский процесс в сценарии оболочки bash?
  • почему Bash не будет добавлять мои переменные вместе?
  • Как запустить «find -exec <script> {} \;
  • Функция Scripting SSH, получившая ошибку «Ошибка соединения»
  • Сценарий Bash для удаления самого старого файла из папки
  • Shell script: перенаправить вывод sql-запроса в файл
  • Почему параметр $ 0 дает мне только базовое имя вместо полного пути после преобразования x-shellscript в x-исполняемый?
  • Как запрограммировать передачу сигнала разрыва (Magic SysRq) через последовательный терминал
  • Команда запускается из оболочки, но не запускается из сценария.sh
  • Как сделать $ @ начать одну итерацию вперед
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.