在使用 AWK 添加选项卡时遇到问题
Posted
技术标签:
【中文标题】在使用 AWK 添加选项卡时遇到问题【英文标题】:Getting Issues In Adding A Tab Using AWK 【发布时间】:2016-11-15 13:10:44 【问题描述】:示例日志
Location Number Status Comment
Delhi 919xxx Processed Test File 1
Mumbai 918xxx Got Stucked Test File 123
我正在尝试使用 AWK 在 Status 之后添加一个选项卡空间,但出现错误。
示例查询
awk '$3 = $3 "\t"; print' z
输出为
Location Number Status Comment
Delhi 919xxx Processed Test File 1
Mumbai 918xxx **Got** **Stucked** Test File 123
由于将“被卡住”作为多个字段,请提出建议。
【问题讨论】:
我可能在编辑过程中更改了输入文件;但如果字段之间有 2+ 个字符分隔符,那么您可以使用一些 sed,而不是 awk 脚本如何判断Got Stucked
中的空格是字段的一部分,而不是字段之间的分隔符?您的字段实际上是由制表符分隔的,还是您的字段是固定宽度或其他?
【参考方案1】:
如果您只想在标题文本Status
之后添加一个制表符以使其看起来更好,请仅对第一条记录使用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 不会重建记录并将 FS
替换为 OFS
等。
【讨论】:
【参考方案2】:@JamesBrown 的回答听起来像您要求的,但也要考虑:
$ awk -F' +' -v OFS='\t' '$1=$11' file | column -s$'\t' -t
Location Number Status Comment
Delhi 919xxx Processed Test File 1
Mumbai 918xxx Got Stucked Test File 123
awk 将 2+ 个空格的每个序列转换为一个制表符,因此结果是一个制表符分隔的流,column
如果这是您的最终目标,然后可以将其转换为视觉对齐的表格。或者您可以生成一个 CSV 以读取 Excel 或类似文件:
$ awk -F' +' -v OFS=',' '$1=$11' 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' +' -v OFS=',' '$1=$1; for(i=1;i<=NF;i++) gsub(/"/,"\"\"",$i); if ($i~/[[:space:],"]/) $i="\""$i"\"" 1' file
Location,Number,Status,Comment
Delhi,919xxx,Processed,"Test File 1"
Mumbai,918xxx,"Got Stucked","Test File 123"
如果您的输入字段并非总是由至少 2 个空白字符分隔,请告诉我们它们是如何分隔的。
【讨论】:
应该是 2+ 个空格或制表符。 可能是,在这种情况下-F'[[:space:]]2,|\t'
。也可能是固定宽度输入,idk。我希望得到 OP 的一些回应。【参考方案3】:
尝试使用
awk -F' ' '$3 = $3 "\t"; print' z
问题是 awk 考虑(默认情况下)单个空格作为两列之间的分隔符。这意味着Got Stucked
实际上是两个不同的列。
-F' '
告诉 awk 使用双空格作为分隔符来区分两列。
【讨论】:
以上是关于在使用 AWK 添加选项卡时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
重新打开选项卡时返回视图层次结构中的初始 ViewController
当添加子选项卡时,如何使 qtabwidget 实例自动调整大小?