通过awk分割文件

通过awk分割文件

这是我的文件,其中包含三列并用“\t”分隔,第二列的分隔符是空白

       1   a b    tom
       2   a b c  sim
       3   a      mary
       4   o l    shey   
       5   c      bob

我想获取第二列包含多个元素的第一个文件

       1   a b    tom
       2   a b c  sim
       4   o l    shey 

然后我想得到第二个这样的文件

       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

第二步使用 miller 的替代解决方案以及基于字段 2 中的空格选择记录的想法(假设空格仅在字段 2 中具有多个元素的情况下出现):

awk -F'\t' '$2 ~ / /' |
tee out1 | 
mlr --tsv -N nest --explode --values --across-records --nested-fs " " -f 2 >out2

相关内容