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

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

У меня есть набор пар файлов .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 переменной (хотя я не знаю, можно ли передать это в headопцию -n?); однако, похоже, parallel {}усложняет этот подход.

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

решение1

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

head -n "$(cat File1)" File2

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

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

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

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

решение2

Расширяя ответ Жиля:

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

У вас, вероятно, есть много File1, которые вы хотите связать с File2. :::+ делает это.

Связанный контент