手順には、次のコマンドを使用してスクリプトファイルがシステムでテストされることを示します。
awk -f ./awk4.awk input.csv
次のファイルを受け入れ、名前と性的フィールドを出力するawkスクリプトを作成します。
明らかに、awk -fを使用して、コマンドラインで実行できるawkスクリプトでなければならないbashスクリプトを作成しました。以下は私のコードです。すべてを再実行せずにbashスクリプトをawkスクリプトに変換する簡単な方法はありますか?方向が本当に混乱しています。
#!/usr/bin/awk -f
##comment create an awk script that will accept the following file and output the name and grade fields
##comment specify the delimiter as ","
awk -F, '
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}' $1
答え1
awkスクリプトでは、コンテンツはawk
コマンドとして提供するものです。したがって、この場合は次のようになります。
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}
ただし、これにより-F ,
ブロックに設定するのではなく、使用するのが難しくなる可能性がFS
ありますBEGIN
。
したがって、スクリプトは次のようになります。
#!/usr/bin/awk -f
##comment create an awk script that will accept the following file and output the name and grade fields
##comment specify the delimiter as ","
BEGIN { FS = "," }
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}
答え2
スクリプトを作成しましたが、awk
スクリプトに入れました。これはあなたのawk
スクリプトです:
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}
ファイルとして保存しscript.awk
て実行してみてください
awk -F',' -f script.awk inputfile
今スクリプトのいくつかのヒント:
awk
コマンドは次のとおりですCONDITION {COMMAND(S)}
。CONDITION
行(レコード)が満たされると{COMMAND(S)}
実行されます。存在しない場合は、CONDITION
すべての{COMMAND(S)}
レコードに対して実行します。存在しない場合は、{COMMAND(S)}
満足する限りレコードを印刷します。CONDITION
あなたの場合:
/./
すべての文字に一致する正規表現です。したがって、空行を除くすべての行 - 条件としてほぼ重複します。デフォルト値を適用する
" "
ために変数間の区切り文字として使用します。,
,
スクリプトの初期ブロックに区切り文字として使用を提供する必要がありますBEGIN
。
BEGIN {FS=","}
{print $1,$2}
出力区切り文字としてカンマを使用するには、次のようにします。
BEGIN {FS=OFS=","}
{print $1,$2}
答え3
Awkスクリプトはでのみ作成できますawk
。 awkスクリプトを作成する方法は2つあります。
awkコマンドをテキストファイルに書き、
awk -f /path/to/file.awk
あなたの場合は次のようになります。/./ { ##comment print the name and grade, which is first two fields print $1" "$2 }
次のように実行できます。
awk -F, -f /path/to/file.awk inputFile
または、スクリプト自体でフィールド区切り文字を設定せずに
awk -f ./path/to/file.awk inputFile
実行する必要がある場合:-F,
BEGIN{ FS=","} /./ { ##comment print the name and grade, which is first two fields print $1" "$2 }
それから
awk -f /path/to/file.awk inputFile
。コマンドを作成するがshebangを使用してスクリプトを読み取る必要があるインタプリタを指定します。あなたの場合は次のようになります。
#!/usr/bin/awk -f ## With this approach, you can't use -F so you need to set ## the field separator in a BEGIN{} block. BEGIN{ FS=","} /./ { ##comment print the name and grade, which is first two fields print $1" "$2 }
その後、スクリプトを実行可能にし(
chmod a+x /path/to/file.awk
)、次のように実行できます。/path/to/file.awk inputFile
これはawkスクリプトです。 3番目のオプションは、次のことを書くことです。シェルスクリプトを実行し、シェルスクリプトにawkを実行させます。次のようになります。
#!/bin/sh
awk -F, '
/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}' "$1"
あなたが持っているものはどちらもありません。あなたはawk shebangを使用していますが、awkスクリプトの代わりにシェルスクリプトを使用しています。