web-dev-qa-db-ja.com

argvを使用してAWKでテキストファイルのN番目の列を印刷する方法

空白で区切られたデータが列になっているテキストファイルがあるとします。入力としてファイル名と数値Nを受け取り、その列のみを出力するシェルスクリプトを作成します。 awkを使用すると、次のことができます。

awk < /tmp/in '{print $2}' > /tmp/out

このコードは、2番目の列を出力します。

しかし、任意の列をargvで渡すことができるように、シェルスクリプトでどのようにラップするのでしょうか。

25
speciousfool
awk -v x = 2 '{print $ x}'

またはシェルスクリプトで:

#!/ bin/sh 
 num = $ 1 
 awk </ tmp/in -vx = $ num '{print $ x}'> /tmp/out
37
Ray
awk '{print $'$myvar'}' < /tmp/in > /tmp/out

$ myvarは変数列(整数)です。スクリプトインジェクションに注意してください!

7
strager