1

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

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

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

4

3 回答 3

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
于 2013-01-11T16:07:16.540 回答
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",而对于某些 shell,您sed不需要在 之后的文字换行符i,但上面的内容非常便携。您始终可以使用文字tab(您可能需要ctrl-v tab在交互式提示下键入)。

于 2013-01-11T16:07:31.657 回答
0

这可能对您有用(GNU):

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

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

于 2013-01-11T19:47:33.720 回答