次の簡単なbash
スクリプトは(ファイル内list.txt
)行番号を印刷します。
function get_row
{
[[ $1 = 1 ]] && awk '{print $1}' list.txt
[[ $1 = 2 ]] && awk '{print $2}' list.txt
}
get_row 1
get_row 2
しかし、もう少しエレガントに書きたかったです。
変数として関数を呼び出すと、変数が値を取得するように$1
変数を設定できますか?awk '{print $val}'
get_row 1
$val
1
答え1
このようなことをしたいですか?
function get_column
{
awk -v val=$1 '{print $val}' list.txt
}
$1
上記は、返されて関数に渡される列の一致です。$1
from関数の行番号と一致する行を印刷する必要がある場合は、代わりに次のように使用してください。
function get_row
{
awk -v val=$1 'NR==val{print ; exit}' list.txt
}
または、シェルに次のようにval
値を計算して設定し、値を印刷させますawk
。
function get_column
{
awk '{print $val}' val=$1 list.txt
}
function get_row
{
awk 'NR==val{print ; exit}' val=$1 list.txt
}
ここではval
数字だけを渡します。val
以下を含む場合バックスラッシュ文字をエスケープする際に問題が発生します。awk
渡された値に対してCエスケープシーケンスを実行し、-v val=
シェル変数withはbyの値val="\\n"
に変更されます。\n
アッ。
答え2
あなたはそれを使用することができます:
field=$1 awk '{print $ENVIRON["field"]}'
すべてのPOSIX互換システムで動作し、使用時にコードの挿入を心配する必要はありません。-v val=
get_column
また、関数名はget_row
。