2017-11-30 23 views
0

朝の男、awkで使用する文字列のリスト内の単語の位置を見つける方法は?

私はgrep + awkしたいファイルがありますが、多くのフィールドがあります。 私は特に興味があります(awk '{print $i}'にしたいと思います)。しかし、手動で数える以外にどのような位置(つまり「i」はここにある)がわかりますか?

約70フィールドのファイルで、時間を大幅に節約できます。 :)

どうもありがとう、イアン・マッゴーワンの提案に続き

[編集]

、私は、ファイルのヘッダー内の列番号を探します:

head -1 myFile | awk '{for (i=1; i<=NF; i++) printf("%3d=%s\n", i, $i); }' | grep -i <the_column_Im_looking_for> 

みんなありがとう、

Will1v

+0

を 'エコーちょっとそこ|のawk '{印刷指数($ 0 "そこは")}'' 'を返します5' 、 それが役に立てば幸い。 –

+0

希望の列を見つけるための条件は何ですか? –

+0

サンプルテキストを期待される出力とともに投稿してください。 –

答えて

1

私はサンプルを探していたが、

$ cat > file 
this is 
the sample 
$ awk '{ 
    for(i=1;i<=NF;i++) 
     if($i=="sample") 
      print NR,i 
}' file 
2 2 
1

大文字区切りのファイルのプロファイルを作成しようとすると、これはいつも行います。

$head -4 myfile 
4A  1  321  537  513.30 
4B  0.00 
8  592  846  905.66 
9B2  39  887  658.77 

列/フィールドをループすることにより、トランスポーズやピボット:

$awk '{ for (i=1; i<=NF; i++) printf("%4d %3d=%s\n", NR, i, $i); }' < myfile 
    1 1=4A 
    1 2=1 
    1 3=321 
    1 4=537 
    1 5=513.30 
    2 1=4B 
    2 2=0.00 
    3 1=8 
    3 2=592 
    3 3=846 
    3 4=905.66 
    4 1=9B2 
    4 2=39 
    4 3=887 
    4 4=658.77 

あなたはprintfのための書式マスクでprintf("row=%-4d col=%-3d:%s\n", NR, i, $i);または何を追加し、あなたが見つけることが気にだけデータをgrepすることができますまたは44番目の列を取得するためにcol = 44の列grepを知っている場合は、あなたがこれを行うことができますので

+1

すぐにカウントするオプションが組み込まれていることを期待していましたが、それはかなり良いです。イアン! – Will1v

+0

もう1つの提案は、カラム参照を1,2,3 ...からA、B、C ...などに変換することです。これはExcelのセル参照に少し似ています。 –

1

xargs -n1は、列1行に1つずつ印刷します:

head -1 file | xargs -n1 | grep -n "column_name" 
関連する問題