2

1 日目に、次のような大きな CSV 出力を 受け取る ことがあります。 -しかし、私は特定の文字列を持つ垂直列にのみ興味があります。たとえば「おじさん」。
this,is,a,test
bob,is,your,uncle
sound,one,"Zen proverb",clapping



test,this,is,a
clapping,one,sound,"Zen proverb"
uncle,bob,is,your
Neo,the,Matrix,"Has you"



test
clapping
uncle
Neo

私は awk と PERL の初心者ですが、awk は一致した文字列に基づいて最初の一致列を出力できると思います (列を上下に移動します)。この種のデータを解析する方法を知っている人はいますか?

4

1 に答える 1

2

以下が必要なようです: 文字列とカンマ区切りのファイルが与えられた場合、文字列の最初の一致を見つけて、ファイル内の各レコードのそのフィールドを出力します。ファイルに対して 2 つのパスを作成し、最初のパスで一致を探します。

 s=uncle
 awk 'NR==FNR && /'$s'/ { for( i=1; i<=NF; i++ ) if( $i ~ /'$s'/ ) { a=i; nextfile; } }
    NR!=FNR{ print $a}' FS=, input input

文字列がファイルにない場合、2 回目のパスでレコード全体が出力されることに注意してください。またnextfile、標準の awk ではありませんが、gawk. ではなくnextfile、次のことを行うことができます: NR==FNR && /'$s'/ && !a、または awk を2回呼び出して、最初に出力する列を取得し、2回目に印刷を行います。

于 2012-06-18T16:50:13.873 に答える