2016-12-07 20 views
0

ファイルからランダムなレコードを取得しようとしています。ファイルには合計10個のレコードがあります。 私が現在持っているものがなぜ機能していないのか分かりません。私は、任意の数1-10ため$nに置き換えて問題がない場合は はawkコマンドで変数に格納された数値を使用する方法

n=expr $RANDOM % 10 + 1 
awk 'BEGIN{RS = "%"} NR==$n' pathToFile 

(私は ``周りに何のnに等しいています)。あなたのコードからの唯一の違いは、変数の周りの余分な"'" "'"であることを

awk 'BEGIN{RS = "%"} NR=="'"$n"'"' /folder/file 

注:

+0

'n = $((RANDOM%10 + 1))'を使用します。 'expr'はPOSIXの算術演算では時代遅れです。 – chepner

答えて

0

これは、あなたが望むように動作するはずです。

2

あなたが挑戦引用避けるためにawk内の乱数を生成することができます:あなたはawkに生成して割り当てることができ

awk -v min=1 -v max=10 'BEGIN{srand() 
n=int(min+rand()*(max-min+1)) 
} 
NR==n {print; exit}' file 

または、:あなたはランダムなレコードを印刷したい場合は

awk -v min=1 -v max=10 'BEGIN{srand() 
    n=int(min+rand()*(max-min+1)) 
} 
#... the rest of the awk ...' 

をコマンドライン:

$ awk -v n=$(expr $RANDOM % 10 + 1) 'BEGIN{ print n }' 

または、

$ echo $n 
7 
$ awk -v n="$n" 'BEGIN{ print n }' 
7 
関連する問題