【问题标题】:Add repeated content in middle of tab delimited file using awk/sed使用 awk/sed 在制表符分隔文件中间添加重复内容
【发布时间】:2013-01-11 15:17:32
【问题描述】:

我有一个文本文件(制表符分隔),我需要在第 3 行添加一个新的标题行

[Tab] ABC123   ABC124
[Tab] High     High
ENSG  8.9      7.2

我想要的新行将是第 3 行,然后我想打印 5 次欧洲,每个之间的制表符,然后亚洲 6 次,每个之间的制表符...

[Tab] ABC123   ABC124
[Tab] High     High    
[Tab] European European [this will be the new line]
ENSG  8.9      7.2

我正在考虑使用 sed 以便我可以使用

sed '4 i'

但我真的不知道如何将新内容实际打印/附加到新行中,我猜我需要开始 /European/\t/a 或类似的。

基本上挣扎,可能是因为我没有聪明地使用谷歌搜索!

【问题讨论】:

  • 您要插入新行,还是替换现有行?
  • 考虑编辑您的问题以显示您需要的确切输入和输出,而不是口头描述。口头描述会产生歧义;-)。祝你好运。

标签: linux text sed awk


【解决方案1】:

使用sed '3i\ \tEuropean\tEuropean' file:

$ cat file
        ABC123          ABC124
        High            High
ENSG    8.9             7.2

$ sed '3i\ \tEuropean\tEuropean' file
        ABC123          ABC124
        High            High
        European        European
ENSG    8.9             7.2

编辑:

我可能会这样做awk 'NR==3{for(i=0;i<10;i++)s=s"\tEuropean";print s}1'

$ awk 'NR==3{for(i=0;i<10;i++)s=s"\tEuropean";print s}1' file
        ABC123          ABC124
        High            High
        European        European        European    European    European    European    European    European    European    European
ENSG    8.9             7.2

【讨论】:

  • 谢谢!我可以让它更灵活,例如我可以让它打印欧洲 10 次而不必每次都输入吗?
  • 如果我想输入欧洲 10 次然后亚洲 5 次 - awk 'NR==3{for(i=0;i
  • 虽然awk 'NR==3{for(i=0;i&lt;10;i++)s=s"\tEuropean";for(i=0;i&lt;5;i++)s=s"\tAsian";print s}1',你几乎只想打印一次
【解决方案2】:

有几种方法可以做到这一点。一种技术是:

t="$(printf \\t)"  # Assign t to be a string with one tab
sed -e '4i\
European${t}European...
' input-file > output-file

对于某些 shell,您可以执行 t=$"\t" 之类的操作,而对于某些 sed,您不需要在 i 之后添加文字换行符,但以上内容非常便携。您始终可以使用文字 tab(您可能需要在交互式提示符下输入 ctrl-v tab)。

【讨论】:

    【解决方案3】:

    这可能对你有用(GNU):

    sed -r '2!b;G;:a;/(\tEuropean){10}/!s/$/\tEuropean/;ta' file
    

    其中10可以是任意数量的重复字段\tEuropean

    【讨论】:

    • 嗯,我好像没有 GNU sed: s/: Event not found
    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多