파일에서 명령 로드

파일에서 명령 로드

텍스트 파일에 명령을 작성한 다음 이를 파일로 터미널에 로드할 수 있습니까? 그렇다면 파일을 로드하는 명령은 무엇입니까? 감사해요.

예를 들어 파일 명령은 다음과 같습니다.

awk -f program.awk d01.active > out1
awk -f program.awk d02.active > out2

명령을 사용할 수 없는 awk 프로그램을 실행하는 데 문제가 있기 때문입니다.

awk -f program.awk d??.active > out

많은 수의 파일에 대해 program.awk를 사용해야 하는데 해당 명령으로 프로그램을 수정할 수 없을 때 이것이 나에게 더 간단한 해결책처럼 보입니다.

이 질문과 관련된https://stackoverflow.com/questions/55313187/more-input-files-in-awk?noredirect=1#comment97356807_55313187

답변1

쉘 명령 목록(한 줄에 하나씩)이 포함된 파일이 있다면 쉘 스크립트가 있는 것입니다! 당신이 해야 할 일은 그것을 실행하는 것 뿐입니다:

sh file_commands

그러나 이것은 내가 필요하다고 생각하는 가장 쉬운 방법은 아닙니다. 현재 디렉토리의 모든 파일을 실행하려면 program.awk간단히 루프를 사용하면 됩니다.d??.active

for file in d??.active; do awk -f program.awk "$file" > "$file".out; done

그러면 d01.active.out출력 파일이 생성되고 에 대한 파일이 d01.active생성 됩니다 .d02.active.outd02.active

답변2

쉘 스크립트는 본질적으로 지정된(또는 기본) 인터프리터에 의해 명령 목록으로 해석되는 줄 구분 기호로 끝나는 명령 목록입니다.

통역사를 지정하려면 파일이 다음으로 끝나야 합니다.해시본(셰뱅이라고도 함).

예:

#!/bin/sh
#!/bin/bash
#!/bin/ksh
#!/bin/zsh
#!/usr/bin/env bash

참고: 각 인터프리터에는 고유한 구문과 규칙 세트가 있습니다. 어떤 제품을 사용하려고 하든 설명서를 잘 읽어야 합니다.


해시뱅 후에는 기본적으로 해당 줄에서 실행할 명령 나열을 시작할 수 있습니다.

참고: 이 명령은 위에서 아래로 순서대로 실행됩니다.


귀하의 예에서는 다음과 같은 것을 원할 것입니다.

#!/bin/sh

awk -f program.awk d01.active > out1
awk -f program.awk d02.active > out2

그런 다음 파일을 실행 가능하게 만들고 명령줄에서 파일에 대한 전체 경로 또는 상대 경로를 지정하여 실행해야 합니다. (또는 실행하여 sh /path/to/file)


그러나 이는 잠재적인 xy 문제처럼 보이며 보다 프로그래밍적인 방식으로 처리될 수 있습니다.

예를 들어:

#!/bin/bash

for file in d??.active; do
    n=${file:1:2}
    awk -f program.awk "$file" > "out$n"
done

관련 정보