Linux 使用AWK添加选项卡时遇到的问题

Linux 使用AWK添加选项卡时遇到的问题,linux,awk,sed,apache-pig,bigdata,Linux,Awk,Sed,Apache Pig,Bigdata,样本日志 Location Number Status Comment Delhi 919xxx Processed Test File 1 Mumbai 918xxx Got Stucked Test File 123 我试图使用AWK在状态后添加一个选项卡空间,但出现错误 示例查询 awk '{$3 = $3 "\t"; print}' z Location Number Status Comment D

样本日志

Location        Number  Status  Comment
Delhi           919xxx  Processed       Test File 1
Mumbai          918xxx  Got Stucked     Test File 123
我试图使用AWK状态后添加一个选项卡空间,但出现错误

示例查询

awk '{$3 = $3 "\t"; print}' z
Location Number Status   Comment
Delhi 919xxx Processed   Test File 1
Mumbai 918xxx **Got**        **Stucked** Test File 123
将输出作为

awk '{$3 = $3 "\t"; print}' z
Location Number Status   Comment
Delhi 919xxx Processed   Test File 1
Mumbai 918xxx **Got**        **Stucked** Test File 123
由于它将“被绊倒”作为多个字段,请建议

尝试使用

awk -F'  ' '{$3 = $3 "\t"; print}' z
问题是AWK考虑(默认)单个空间作为两列之间的分隔符。这意味着
被卡住了
实际上是两个不同的列


使用
-F'
您可以告诉awk使用双空格作为分隔符来区分两列。

如果您只想在标题文本
状态
后添加一个选项卡以使其看起来更好,请仅对第一条记录使用
sub

$ awk 'NR==1 {sub(/Status/,"Status\t")} 1' file
Location        Number  Status              Comment
Delhi           919xxx  Processed           Test File 1
Mumbai          918xxx  Got Stucked         Test File 123

这样,awk就不会重建记录,也不会用OFS等替换FS等。

@JamesBrown的回答听起来像你要求的,但也会考虑:

$ awk -F'  +' -v OFS='\t' '{$1=$1}1' file | column -s$'\t' -t
Location  Number  Status       Comment
Delhi     919xxx  Processed    Test File 1
Mumbai    918xxx  Got Stucked  Test File 123
awk将每个2+空格序列转换为一个制表符,因此结果是一个制表符分隔的流,如果这是您的最终目标,
可以转换为一个视觉对齐的表。或者,您可以生成CSV以读取Excel或类似文件:

$ awk -F'  +' -v OFS=',' '{$1=$1}1' file
Location,Number,Status,Comment
Delhi,919xxx,Processed,Test File 1
Mumbai,918xxx,Got Stucked,Test File 123

$ awk -F'  +' -v OFS=',' '{for(i=1;i<=NF;i++) $i="\""$i"\""}1' file
"Location","Number","Status","Comment"
"Delhi","919xxx","Processed","Test File 1"
"Mumbai","918xxx","Got Stucked","Test File 123"
$awk-F'+'-vofs=','{$1=$1}1'文件
位置、编号、状态、注释
德里,919xxx,已处理,测试文件1
孟买,918xxx,被卡住了,测试文件123

$awk-F'+'-v OFS=','{for(i=1;我可能在编辑过程中对输入文件做了一些更改;但是如果字段之间有一个2+字符的分隔符,那么您可以使用一些sed,而不是awk,那么脚本可以告诉您,
中的空格被阻塞了
是字段的一部分,而不是字段之间的分隔符吗?您的字段实际上是由制表符还是分隔的您的字段是固定宽度还是其他什么?可能是2+空格或制表符。可能是,在这种情况下,
-F'[[:space:]{2,}\t'
。也可能是固定宽度输入,idk。我希望OP能给出一些响应。