파일의 내용을 함수의 옵션/매개변수에 전달하는 방법

파일의 내용을 함수의 옵션/매개변수에 전달하는 방법

.txt 파일 쌍 세트가 있습니다. 각 파일 쌍에서 File1에는 단일 정수가 포함되고 File2에는 여러 줄의 텍스트가 포함됩니다. 제가 작성 중인 스크립트에서는 File1의 정수를 사용하여 File2의 맨 위에서 몇 줄을 떼어낼지 지정한 다음 해당 줄을 다른 파일에 쓰고 싶습니다. 나는 많은 파일 쌍에서 이것을 병렬로 실행하기 위해 gnu-parallel을 사용하고 있습니다.

-n이를 수행하는 간단한 방법은 File1의 내용을 옵션의 매개변수로 전달하는 것인 것 같습니다 head. 이것이 가능합니까? xargsand 를 사용해 보았지만 cat File1둘 다 작동하지 않습니다.

파일 쌍의 예:

File1:
2                        

File2:
AAA
BBB
CCC
DDD

원하는 출력:

File3:
AAA
BBB

headgnu-parallel을 사용하지 않았다면 File1의 내용을 변수에 할당할 수 있었습니다(물론 이를 's' 옵션 에 전달할 수 있을지는 모르겠지만 -n). 그러나 병렬은 {}이 접근 방식을 복잡하게 만드는 것 같습니다.

필요한 경우 추가 정보를 제공할 수 있습니다.

답변1

사용명령 대체.

head -n "$(cat File1)" File2

명령 대체는 명령 출력을 명령줄에 삽입합니다. 출력 끝의 개행 문자가 제거되는데, 이것이 바로 여기서 필요한 것입니다.

또는 bash(다른 sh 변형은 아님)에서 다음을 사용할 수 있습니다.mapfile파일을 한 줄씩 로드하는 기능이 내장되어 있습니다.

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

행은 배열에 로드되므로 행 번호N이다 . 첫 번째 줄의 경우 bash를 사용하면 .${lines[n]}$line

답변2

Gilles 답변 확장 :

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

아마도 File2에 연결하려는 File1이 많이 있을 것입니다. :::+가 그렇게 합니다.

관련 정보