テキストファイルの形式を再指定するコマンドを実行します。
awk -F, '{if ($6<0) print $1$2," "$3$4,$5$6;
else print $1$2," "$3$4$5,$6;}' filename.txt > seqXXX.txt
毎回コマンドを入力する必要がないように、これをスクリプトに置き換えることはできますか?これを行う方法についての記事を読んだが、もっと混乱している。
答え1
これを行う方法は、スクリプトに変換したいコマンドの部分によって多少異なります。次の3つのバリエーションを提供します。
- プログラム
awk
自体がスクリプトとして機能します。 - コマンドは全体としてスクリプトとして機能します。
- このコマンドはシェル機能として機能します。
このawk
プログラムは次のようにスクリプトに置き換えることができます
#!/usr/bin/awk -f
BEGIN { FS = "," }
{
if ($6 < 0)
print $1$2," "$3$4,$5$6
else
print $1$2," "$3$4$5,$6
}
まず、フィールド区切り記号をコンマに設定し、各入力行でコードブロックを実行します。
ここで使用されている-lineを使用すると、スクリプトファイルを実行したときにコマンドラインに書き込んだかのように実行されます#!
。awk -f script.awk
最初の行で使用されるパスは、awk
システムの正しいインタプリタを指すように調整する必要があります(出力を参照command -v awk
)。
chmod +x script.awk
以下を使用してファイルを実行可能にした後
$ ./script.awk filename.txt >seqXXX.txt
このコマンドは、次のようにシェルスクリプトに入れることができます。
#!/bin/sh
awk -F, '{if ($6<0) print $1$2," "$3$4,$5$6;
else print $1$2," "$3$4$5,$6;}' "$@"
ここでは、基本的にコマンドをシェルスクリプトに移植しました。コマンド"$@"
の末尾にあるビットは、awk
スクリプトに提供するコマンドライン引数(単一の入力ファイルの名前でもあります)に置き換えられます。
この実行可能ファイルを作成したら、次のように使用できます。
$ ./script.sh filename.txt >seqXXX.txt
ファイル名が次の場合変化のない絶対に変更せずにスクリプトに入れてください。
#!/bin/sh
awk -F, '{if ($6<0) print $1$2," "$3$4,$5$6;
else print $1$2," "$3$4$5,$6;}' filename.txt >seqXXX.txt
次に、追加のパラメータやリダイレクトなしでコマンドラインからスクリプトを呼び出します。
コマンドをシェル関数に変換できます。これはエイリアスとほぼ同じですが、一般的にはより柔軟です。
myreformat () {
awk -F, '{if ($6<0) print $1$2," "$3$4,$5$6;
else print $1$2," "$3$4$5,$6;}' "$@"
}
これは通常シェルエイリアスなどを置く場所に配置されます(シェルを~/.bashrc
使用している場合はおそらくそこにあります)。bash
この機能は以下で利用できます。次開始したシェルセッション。
上記のシェルスクリプトバリアントとほぼ同じ方法で呼び出されます。
$ myreformat filename.txt >seqXXX.txt