使用awk / sed在制表符分隔文件的中间添加重复的内容

时间:2013-01-11 15:17:33

标签: linux text sed awk

我有一个文本文件(制表符分隔),我需要在第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'

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

基本上都在苦苦挣扎,可能是因为我没有聪明地进行Google搜索!

3 个答案:

答案 0 :(得分:3)

使用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

答案 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)。

答案 2 :(得分:0)

这可能适合你(GNU):

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

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