0

ファイルを検索し、特定の値が列に存在するかどうかに基づいて特定の列を返そうとしています。たとえば、ファイルで「Red」を検索すると、次のようになります。

One    Two    Three
Cat    Dog    Chicken
Blue   Black  Red
Blah   Blah   Blah

返品したい:

Three
Chicken
Red
Blah

どの列の grep または他の検索コマンドで一致が見つかったかを知るだけでも受け入れるので、カットを使用できますが、それほど多くは見つかりません。

4

2 に答える 2

3

これは 1 つの方法です。

すべてのデータを matrix に格納しa[line][column]ます。列番号を に保存しますp。最後にすべての項目を印刷しますa[line][p]

$ awk -v text=Blue '{for (i=1; i<=NF; i++) {a[NR,i]=$i; if ($i~text) {p=i}}} END{ for (i=1; i<=NR; i++) print a[i,p]}' a
One
Cat
Blue
Blah
$ awk -v text=Red '{for (i=1; i<=NF; i++) {a[NR,i]=$i; if ($i~text) {p=i}}} END{ for (i=1; i<=NR; i++) print a[i,p]}' a
Three
Chicken
Red
Blah

アップデート

完全に一致させるには、次のように置き換えます~( ==thanks konsolebox ):

awk -v text=Blue '{for (i=1; i<=NF; i++) {a[NR,i]=$i; if ($i==text) {p=i}}} END{ for (i=1; i<=NR; i++) print a[i,p]}' a
                                                            ^^
于 2013-09-09T22:16:34.023 に答える
0

コメントに投稿した質問への回答方法に応じて、1つの可能性があります。

awk -v tgt="Red" '
  NR==FNR {for (i=1;i<=NF;i++) if ($i==tgt) cols[i]; next}
  {sep=""; for (i=1;i<=NF;i++) if (i in cols) {printf "%s%s", sep, $i; sep=OFS}; print ""}
' file file
于 2013-09-10T00:30:31.430 に答える