【问题标题】:Using AWK to split elements separated by " "使用 AWK 拆分由“”分隔的元素
【发布时间】:2017-09-21 21:07:18
【问题描述】:

我有一个 .csv 文件,其中包含我想要进一步分离的三个元素。文件中的行如下所示:

gene_id "ENSDARG00000104632", gene_version "2", gene_name "RERG"
gene_id "ENSDARG00000104632", gene_version "2", transcript_id "ENSDART00000166186"
gene_id "ENSDARG00000104632", gene_version "2", transcript_id "ENSDART00000166186"

我想把 " " 中的字符串做成自己的元素,用 , 分隔

基本上我希望它看起来像这样:

gene_id, ENSDARG00000104632, gene_version, 2, gene_name, RERG
gene_id, ENSDARG00000104632, gene_version, 2, transcript_id, ENSDART00000166186
gene_id, ENSDARG00000104632, gene_version, 2, transcript_id, ENSDART00000166186

我曾想过这样做:

awk 'BEGIN{OFS=",";FS="""};{print $1,$2,$3,$4,$5,$6}'

但是,AWK 似乎无法将 " 识别为分隔符。有没有人建议如何实现这一点?

【问题讨论】:

  • 没有工具或编程语言可以识别由该字符分隔的任何文本中的任何给定字符。您总是需要转义它或以其他方式处理它:"\"" 在这种情况下。

标签: csv awk delimiter


【解决方案1】:
$ awk -F'[ ",]+' -v OFS=', ' '{sub(/"$/,""); $1=$1} 1' file
gene_id, ENSDARG00000104632, gene_version, 2, gene_name, RERG
gene_id, ENSDARG00000104632, gene_version, 2, transcript_id, ENSDART00000166186
gene_id, ENSDARG00000104632, gene_version, 2, transcript_id, ENSDART00000166186

【讨论】:

  • 仅在某些 awks 中。 NF-- 所做的是每个 POSIX 的未定义行为。
  • 谢谢!我不完全理解,但它确实有效。
  • 不客气。如果有任何不清楚的部分,请随时提出问题。
猜你喜欢
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多