gpt4 book ai didi

awk - 使用 AWK 使用多字符字段分隔符

转载 作者:行者123 更新时间:2023-12-02 11:20:57 25 4
gpt4 key购买 nike

我在使用 AWK 的字段分隔符时遇到问题,输入文件如下所示

1 | all | | synonym |
1 | root | | scientific name |
2 | Bacteria | Bacteria | scientific name |
2 | Monera | Monera | in-part |
2 | Procaryotae | Procaryotae | in-part |
2 | Prokaryota | Prokaryota | in-part |
2 | Prokaryotae | Prokaryotae | in-part |
2 | bacteria | bacteria | blast name |

这里的字段分隔符是 tab,pipe,tab \t|\t所以我尝试只打印第一列和第二列

awk -F'\t|\t' '{print $1 "\t" $2}' nodes.dmp | less

输出是第一列,后跟管道字符,而不是所需的输出。我尝试转义管道 \t\|\t,但输出保持不变。

1 |
1 |
2 |
2 |
2 |
2 |

打印第一列和第三列给了我最初的预期输出。

awk -F'\t|\t' '{print $1 "\t" $3}' nodes.dmp | less

但我很困惑为什么这没有按预期工作。

我知道下面的 perl oneliner 可以工作,但我真正想要的是使用 awk。

perl -aln -F"\t\|\t" -e 'print $F[0],"\t",$F[1]' nodes.dmp | less

最佳答案

管道 | 字符似乎使 awk 感到困惑,认为 \t|\t 暗示字段分隔符可以是 \t\t 之一。告诉 awk 按字面解释 |

$ awk -F'\t[|]\t' '{print $1 "\t" $2}'
1 all
1 root
2 Bacteria
2 Monera
2 Procaryotae
2 Prokaryota
2 Prokaryotae
2 bacteria

关于awk - 使用 AWK 使用多字符字段分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18201923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com