2017-03-23 12 views
2

私が持っていると仮定:「不可視」FS

awk 'BEGIN{ 
     c["1","2","3"]=1 
     c["12","3"]=2 
     c["123"]=3   # fleeting... 
     c["1","23"]=4 
     c["1" "2" "3"]=5 # will replace c["123"] above... 
     for (x in c) { 
      print length(x), x, c[x] 
      split(x, d, "")  # is there something that would split c["12", "3"] into "12, 3"? 
           # better: some awk/gawkism in one step? 
      for (i=1; i <= length(x); i++) 
       printf("|%s|", d[i]) 
      print "\n" 
      } 
     }' 

プリント:各場合において

4 123 4 
|1||||2||3| 

3 123 5 
|1||2||3| 

4 123 2 
|1||2||||3| 

5 123 1 
|1||||2||||3| 

、配列エントリを形成する,の使用はA生成視覚的に似ている結果(123)が表示されますが、別個のハッシュ値です。私がどこにあるかを決定することができるようにsplitに使用するどのような値

(すなわち、どのような区切り文字は異なるc["123"]よりc["12", "3"]ハッシュを作る)印刷する際に失われた要素間の「目に見えない」区切りがあるということを思われます配列インデックスが作成されたときにコンマが配置された文字列?つまり、c["12","3"]の配列エントリを作成した場合、"12","3""123"の文字列が(端末内で)c["123"]と視覚的に異なる文字列として印刷する最も簡単な方法は何ですか? = c["12" SUBSEP "3"]

(私は配列エントリを作成するとき、私はc["12" "," "3"]を行うことができることを知っている。しかし、何が違ったc["123"]よりc["12","3"]ハッシュを行い、それらがどのようにターミナルに異なっ見られるように、それらを印刷するには...)

答えて

3

c["12","3"]

awkマニュアルページのSUBSEPを参照してください。 CSVがあり、c["12" FS "3"]の代わりにc["12","3"]と書いて、コンマが配列インデックスにセパレータとして表示されている場合は、BEGINセクションにSUBSEP=FSを設定することができます。

+1

パーフェクト。ありがとう。 'SUBSEP'は' gawk'ですが、正しいのですか? – dawg

+0

SUBSEPはすべてのawkバージョンにはありません。 –

+0

Hmmm。 Bruce Barnettは[NAWK/GAWKのみ](http://www.grymoire.com/Unix/Awk.html#uh-62)ですが、それは[POSIX man page](http://pubs.opengroup。 org/onlinepubs/009695399/utilities/awk.html)。ブルースは編集が必要です。 – dawg

関連する問題