【问题标题】:parsing tab separated header of a file in unix在unix中解析文件的制表符分隔标题
【发布时间】:2015-03-13 06:11:15
【问题描述】:

我正在尝试制定一个通用脚本来获取制表符分隔的列值(作为文件的标题)。通过 awk 分离对于获取列名是很好的。我不知道如何获取每个制表符分隔的值,直到最后或最后一个 NF(如果使用 awk)。文件中的列数不固定,有时它可能会出现 20 列,有时可能是 100 列,等等。 例如:文件中的制表符分隔列是-

abc ttr nnc r32 inc ...

如果我写一个简单的 awk 为:

head -1 file | awk 'BEGIN {NF="\t"} {print $1,$2, etc}

它会显示由 $1、$2 等表示的每个制表符分隔的列。我尝试了一个增量版本,将 $1、$2 等替换为 $i,但不起作用。

对此有何想法?

【问题讨论】:

  • 你想达到什么目的?你试过awk 'BEGIN {NF="\t"} {for(i=1;i<=NF;i++)print $i}
  • 感谢 Avinash 的回复,我已经尝试过了,但没有给出适当的结果。有些列也像“电话号码”一样用空格分隔,在这种情况下,它也不应该将这两个分开,因为我的 NF 已经是“\t”,但它正在这样做。

标签: unix awk text-parsing


【解决方案1】:

如果我理解正确,您问的是如何循环从 1 到 NF 的字段。以下是此类循环的示例:

$ head -1 file | awk -F"\t" '{for (i=1;i<=NF;i++)printf "%s ",$i; print"";}'
abc ttr nnc r32 inc 

【讨论】:

  • 谢谢约翰,这就是我想要的。猜猜我没有正确使用 printf。
  • @habe 你可以用tr '\t' ' ' 做到这一点。如果您告诉我们您真正想要做什么,那么您需要这样做transformation,我们可以提供帮助...
猜你喜欢
  • 1970-01-01
  • 2013-10-16
  • 2015-02-14
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多