【问题标题】:How to stretch n times the content of a column, according to another column's length (using awk)?如何根据另一列的长度(使用awk)将一列的内容拉伸n倍?
【发布时间】:2020-09-29 10:57:48
【问题描述】:

出于解析目的,我需要在命令行中根据另一列的字符数将第一列的内容拉伸 n 次。

注意: Col2 包含混合类型:,.[A-Za-z]

我应该这样转:

cat myFile.tsv 

Col1    Col2
Text1    XXXX
Text2    XX
Text3    XXX

进入这个:

cat myNewFile.tsv 

Col1
Text1    
Text1    
Text1    
Text1    
Text2    
Text2 
Text3    
Text3    
Text3   

您有什么有效的建议吗? 谢谢 :D !!

【问题讨论】:

  • 使用for循环...可以使用length函数获取字符数
  • 显然由于内存限制,我无法用 for 循环处理它,这可能吗?
  • 将您给定的示例更改为类似于您的实际用例的东西,除非那些 X 足以代表它..我的意思是使用 awk 循环,而不是 shell,以防您这样尝试..添加您也尝试过的命令,因为预计您会表现出您的努力..
  • 好的,我试试 awk 循环。那些 X 只代表第二列 (4,2,3) 中的字符数
  • 谢谢!事实上,我想我设法用awk '{for(i=0;i<length($2);i++)print $1}' myFile.tsv > myNewFile.tsv 做到了

标签: awk sed command-line


【解决方案1】:

使用 awk:

awk 'NR==1{print $1; next} {for(i=1; i<=length($2); i++){print $1}}' file

NR 是当前行号。

输出:

Col1 文本1 文本1 文本1 文本1 文本2 文本2 文本3 文本3 文本3

【讨论】:

  • Sheez - 死铃声。写了一行并查看了您的答案,唯一的区别是您拥有的额外{..} 和循环i=0; i&lt;length($2); i++ 以及使用FNR 而不是NR。我喜欢它。
  • @cast 虽然这里不需要,但在处理制表符分隔文件时使用-F'\t'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2015-06-15
  • 2020-10-29
  • 1970-01-01
相关资源
最近更新 更多