Loading commands from file

If you have a file with a list of shell commands, one per line, then you have a shell script! All you need to do is run it:

sh file_commands

However, that isn't the simplest approach for what I think you need. If you want to run program.awk on each d??.active file in the current directory, you can simply use a loop:

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

That will create a d01.active.out out file for d01.active, a d02.active.out file for d02.active and so on.


A shell script is essentially a list of commands terminated by line separators that will be interpreted as a list of commands by the specified (or default) interpreter.

To specify an interpreter your file should start with a hashbang (also called shebang).

Examples:

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

Note: each of these interpreters have their own syntax and set of rules. You should study the manual for whichever one you plan on using.


After your hashbang you can essentially just start listing your commands to be executed each on their own line.

Note: these commands will be executed in order from top to bottom


In your example you would want something like:

#!/bin/sh

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

You would then have to make this file executable and would run it by specifying the full or relative path to the file on the command line. (or by running sh /path/to/file)


This does seem like a potential x-y problem though and can probably be handled in a more programmatic way.

Such as:

#!/bin/bash

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

Tags:

Terminal