2015-03-13 52 views
1

我想解决一个通用脚本获取选项卡分隔的列值(作为文件头)。通过awk分离对于获取列名是很好的。我不明白如何让每个制表符分隔值直到结束或最后一个NF(如果使用awk)。列的文件是不是在固定的数量,有时它可能会拿出20列,有时也可能是100,等等 对于例如:文件中的制表符分隔栏是 -解析选项卡unix中的文件标头分隔

abc ttr nnc r32 inc ... 

如果我编写一个简单的AWK为:

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

它会呈现我通过$ I替换$ 1,$ 2等试图增量版本由$ 1,$ 2等代表的每个制表符分隔的列,但不会工作。

对此的任何想法?

+1

你想达到什么?你试过'awk'BEGIN {NF =“\ t”} {for(i = 1; i <= NF; i ++)print $ i}' – 2015-03-13 06:24:54

+0

感谢Avinash的回复, 我已经试过了,适当的结果。有些列是空格分开,也就像“电话号码”,在这种情况下,它不应该分开这两个也因为我的NF已经是“\ t”,但它是这样做的。 – knowone 2015-03-13 06:35:28

回答

1

如果我理解正确,你问的是如何遍历从1到NF的字段。这是一个这样的循环的例子:

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

谢谢约翰,这是我想要的。猜猜我没有正确使用printf。 – knowone 2015-03-13 06:38:56

+0

@habe很高兴为你效劳。 – John1024 2015-03-13 06:40:20

+0

@habe你可以用'tr'\ t''''做这个。如果你告诉我们你真的想要做什么,那么你就需要这样做,我们可以帮助... – 2015-03-13 21:58:43