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

У меня есть набор пар .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 ?); однако параллель {} похоже, усложняет этот подход.

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

  • Как сортировать строку, которая в сочетании с строкой + число с использованием сценария bash?
  • Загрузите URL из файла CSV и переименуйте файл
  • сценарий для повторения команды tshark и каждую минуту, изменяющую имя выходного файла
  • Удалить файлы, кроме n файлов с «большим» именем?
  • Расширение *, #,% - Что они означают?
  • Как я могу перечислить каждый порт, обслуживающий веб-страницу
  • Можно ли отображать запущенный таймер в сценарии оболочки при копировании каталога?
  • Файлы размером более 1 ГБ и старше 6 месяцев
  • 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 .

    Linux и Unix - лучшая ОС в мире.