6

Is it possible to write commands to text file and then loaded it into terminal as file? If yes, how is the command for loading the file? Thank you.

For instance file_commands:

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

It is because of a problem with running an awk program that doesn't work with command

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

I need to use program.awk for lots of files and this seemed to me as easier solution when I am not able to repair program for that command with ??.

It is related with this question https://stackoverflow.com/questions/55313187/more-input-files-in-awk?noredirect=1#comment97356807_55313187

  • 3
    Isn't this what an ordinary script is? Could you possibly give an example of what it is you want to do? – Kusalananda Mar 23 at 19:00
9

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.

5

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.