これまでのところ、私のスクリプト(script.sh)は次のようになりました。
#!/bin/bash/
BEGIN {
print "Author Name of Book ISBN"
print "------ ------------ ----"
}
{ printf "%-9s &s\n", 1$, 2$, 3$ }
END
次に、次のコマンドを実行します。
sort -k 3,3 INPUTFILE.INPUT | awk -f script.sh
上記のどれも好きなようには機能しません。
また、入力ファイルのデータはカンマで区切られます。また、awkコマンドが実行したい「ループ」を使用する必要があります。
ベストアンサー1
以下はいくつかの問題、いくつかはエラーが発生し、他のものは誤字または誤解の結果です。
- 行を
#!
削除できます。それとも削除する必要がありますか?#!/usr/bin/awk -f
awk
(またはシステムのどこでも)。上記の-lineを使用すると、コマンドラインからスクリプトを呼び出す#!
必要はありませんが、直接使用できます(実行可能な場合)。 -lineがない場合は、コマンドラインで使用する必要があります。awk -f
./script.awk
#!
awk -f
入力データの特定のフィールドの値を参照するには、参照するフィールド番号の代わりに
$n
whereを使用してください。n
n$
フォーマット
printf
文字列にはフォーマットプレースホルダーが1つしかありませんが、3つのデータを提供します。また、パラメータの周りに括弧はありません。ブロック
END
を削除できます。入力にスペース(スペースまたはタブ)で区切られていない、
,
または同じフィールド区切り文字がある場合、またはなどを使用するか、ブロック内の適切な文字に変数を設定してそれを表示する必要があります。それ以外の場合、スクリプトは入力レコードを誤って分割します。|
awk
awk -F ','
awk -F '|'
FS
BEGIN
これでスクリプト()が残りますscript.awk
。
BEGIN {
fmt = "%-15s\t%-15s\t%-15s\n"
printf(fmt, "Author", "Name of Book", "ISBN")
printf(fmt, "------", "------------", "----")
}
{ printf(fmt, $1, $2, $3) }
私は3つのタブで区切られたフィールドのそれぞれを左揃えの文字列にフォーマットするフォーマット文字列を自由に導入しました。各フィールドには15文字のスペースがあります。ブロックを変更して簡単にfmt
調整できますBEGIN
。
通貨は次のとおりです。
sort -t ',' -k 3,3 INPUTFILE.INPUT | awk -F ',' -f script.awk
ここでは、ファイルのデータがコンマで区切られていると仮定します(sort
それに応じてコマンドが変更されました)。