これは、「\ t」で区切られた3つの列を含む私のファイルです。 2 番目の列の区切り文字は空です。
1 a b tom
2 a b c sim
3 a mary
4 o l shey
5 c bob
2番目の列に複数の要素を含む最初のファイルをインポートしたいと思います。
1 a b tom
2 a b c sim
4 o l shey
その後、このような2番目のファイルを取得したいと思います。
1 a tom
1 b tom
2 a sim
2 b sim
2 c sim
4 o shey
4 l shey
実は私も試してみました。
awk -F\\t 'BEGIN {OFS=FS} {n=split($2,aa," ");for (i=1;i<=n;i++) {$2=aa[i]; printf "%s\n" $0 }}'
しかし、それは役に立たないようです。いくつかの提案をすることができますか?ありがとうございます。
答え1
$ awk 'NF>3' file
1 a b tom
2 a b c sim
4 o l shey
$ awk -v OFS='\t' 'NF>3{for (i=2;i<NF;i++) print $1, $i, $NF}' file
1 a tom
1 b tom
2 a sim
2 b sim
2 c sim
4 o shey
4 l shey
コードが機能しない理由の最も明白な問題は、スペースで区切られていると言って表示するときにカンマで区切るようにするsplit($2,aa,",")
ことです。$2
答え2
2番目のステップでは、ミラーの代替ソリューションとフィールド2のスペースに基づいてレコードを選択するというアイデアを使用します(フィールド2に複数の要素がある場合にのみスペースが発生すると仮定)。
awk -F'\t' '$2 ~ / /' |
tee out1 |
mlr --tsv -N nest --explode --values --across-records --nested-fs " " -f 2 >out2