Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在unix中解析以制表符分隔的文件头_Unix_Awk_Text Parsing - Fatal编程技术网

在unix中解析以制表符分隔的文件头

在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} 它会以$

我正在尝试编写一个通用脚本,用于获取以制表符分隔的列值(作为文件的标题)。通过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,但不起作用


对此有什么想法吗?

如果我理解正确,您是在问如何循环从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
转换信息,我们可以帮你。。。