1

ファイルの最初の行を読み、コマンドラインで指定されている列を見つけようとしています。例:command <column> <textfile>したがって$1、columnisとtextfile $2

ファイル列を配列に分割するawkコマンドを作成してから、配列要素が列引数と一致するかどうかを確認するforループを作成しています。コードは次のとおりです。

awk 'NR == 1 {split ( $0,titles ); for ( i=1 ; titles[i] != "$1" ; i++ ) ; FS = " "} NR > 1 {print $i }' file

$1awkが認識する最初の列ではなく、最初のコマンドライン引数を参照するようにします 。forループで列引数を取得するにはどうすればよいですか?$1の変数を作成して渡すことができると思いましawkたが、それが機能しなかったか、間違っていました-どちらかまたは両方。私はこれについて何時間も探していました。私は明白なまたは愚かな何かを見逃しているかもしれませんが、それは私が本当にこれを行う方法を知る必要があるところまで来ています。また、答えを探す際に、私はについてのものを読みましたARGV[]。私は思っARGV[1] == $1たが、どうやらそうではないようだARGV。配列は何を指しているのだろうか?あなたが提供できるどんな助けにも感謝します。

(注:混乱ファイルを支援するために、$ 2と呼ばれるテキストファイルの編集バージョンがあります)

4

2 に答える 2

3
awk -v column="$1" 'NR == 1 { ... } NR > 1 { ... }' "$2"

スクリプト内ではawk、シェル スクリプトに渡された値を$1名前column(-vフラグ プリセットawk変数) で参照できます。

あなたが何をしているのかについてのあなたの説明をよく理解していませんが、私は使用すると思います:

awk -v column="$1" '
    NR == 1 { for (i = 1; $i != column && i <= NF; i++) ; }
    NR >  1 { print $i }' \
    "$2"

awk行をすべて単独でフィールドに分割します。split関数は必要ありません。で遊ぶ必要もありませんFS

于 2012-09-23T04:02:49.193 に答える
2

awk では、最初のコマンド ライン引数はARGV[1]で、$1は現在の行の最初の単語です。それらは2つのまったく異なるものです。

例えば:

$ awk 'BEGIN { print "ARGV[1] =", ARGV[1] }' foo bar
ARGV[1] = foo
于 2012-09-23T03:58:26.777 に答える