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

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

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

-nFile1의 내용을 옵션에 대한 인수로 전달하는 것이 쉬운 방법인 것 같습니다 head. 이것이 가능합니까? 나는 사용해 보았 xargs으나 cat File1둘 다 작동하지 않았습니다.

예제 파일 쌍:

File1:
2                        

File2:
AAA
BBB
CCC
DDD

원하는 출력:

File3:
AAA
BBB

headgnu-parallel을 사용하지 않는 경우 File1의 내용을 변수에 할당할 수 있습니다(비록 옵션 에 전달할 수 있는지는 모르겠지만 -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이 여러 개 있을 수 있습니다. :::+ 이것이 하는 일입니다.

관련 정보