在unix中解析以制表符分隔的文件头
我正在尝试编写一个通用脚本,用于获取以制表符分隔的列值(作为文件的标题)。通过awk进行分离对于获取列名是很好的。在结束或最后一个NF(如果使用awk)之前,我不知道如何获取每个选项卡的分隔值。文件中的列数不是固定的,有时可能有20列,有时可能有100列,等等。 例如:文件中以选项卡分隔的列为-在unix中解析以制表符分隔的文件头,unix,awk,text-parsing,Unix,Awk,Text Parsing,我正在尝试编写一个通用脚本,用于获取以制表符分隔的列值(作为文件的标题)。通过awk进行分离对于获取列名是很好的。在结束或最后一个NF(如果使用awk)之前,我不知道如何获取每个选项卡的分隔值。文件中的列数不是固定的,有时可能有20列,有时可能有100列,等等。 例如:文件中以选项卡分隔的列为- abc ttr nnc r32 inc ... 如果我将一个简单的awk写为: head -1 file | awk 'BEGIN {NF="\t"} {print $1,$2, etc} 它会以$
abc ttr nnc r32 inc ...
如果我将一个简单的awk写为:
head -1 file | awk 'BEGIN {NF="\t"} {print $1,$2, etc}
它会以$1、$2等表示每个选项卡分隔的列。我尝试了一个增量版本,将$1、$2等替换为$I,但不起作用
对此有什么想法吗?如果我理解正确,您是在问如何循环从1到NF的字段。以下是此类循环的一个示例:
$ head -1 file | awk -F"\t" '{for (i=1;i<=NF;i++)printf "%s ",$i; print"";}'
abc ttr nnc r32 inc
$head-1 file | awk-F“\t”{for(i=1;i您试图实现什么?您是否尝试过awk'BEGIN{NF=“\t”}{for(i=1;i)的响应是Avinash,我已经尝试过了,但没有给出适当的结果。有些列也是空格分隔的,如“Phone No”,在这种情况下,它不应该将这两个分开,因为我的NF已经是“\t”但是它正在这样做。谢谢约翰,这就是我想要的。我想我没有正确使用printf。@你可以用tr'\t'
来做这件事。如果你告诉我们你真正想做的是什么,那么你需要做这个tr
转换信息,我们可以帮你。。。