Dataframe 如何复制文件第一行中的每个单词

Dataframe 如何复制文件第一行中的每个单词,dataframe,awk,sed,duplicates,Dataframe,Awk,Sed,Duplicates,如何复制文件头中的每个单词? 我有一个如下所示的数据框: ID sample1 sample2 ... 123 1 0 1 2 ... ... awk 'NR==1 {printf "%s ",$1;for (i=2; i<=NF; i++) printf "%s %s ", $i,$i;print "";next}1' file ID sample1 sample1 sample2 sample2 ... ... 123 1 0 1

如何复制文件头中的每个单词? 我有一个如下所示的数据框:

ID    sample1    sample2    ...
123    1 0     1 2    ...
...
awk 'NR==1 {printf "%s ",$1;for (i=2; i<=NF; i++) printf "%s %s ", $i,$i;print "";next}1' file
ID sample1 sample1 sample2 sample2 ... ...
123    1 0     1 2    ...
...
我希望复制文件中的每个列标题,以便在空间分割数据后,每个列都有一个标题

期望输出:

ID    sample1    sample1    sample2   sample2    ...
123    1    0    1    2    ...
...
我尝试使用sed:

sed -e '1s/*./& &/g' file.in
但它只在行的末尾附加重复的内容

谢谢

有些人喜欢这样:

ID    sample1    sample2    ...
123    1 0     1 2    ...
...
awk 'NR==1 {printf "%s ",$1;for (i=2; i<=NF; i++) printf "%s %s ", $i,$i;print "";next}1' file
ID sample1 sample1 sample2 sample2 ... ...
123    1 0     1 2    ...
...

使用
awk
的另一个选项是简单地使用字符串连接从2开始复制每个字段。例如,使用3空间分隔符(以及输入文件中的省略号),可以执行以下操作:

$ awk 'FNR == 1 { for (i = 2; i <= NF; i++) $i = "   " $i "  " $i }1' file
ID    sample1  sample1    sample2  sample2    ...  ...
123    1 0     1 2    ...
...
sed -r '1 s/\s+\w+/& &/g' file
ID    sample1     sample1    sample2     sample2    ...
123    1 0     1 2    ...
...
当限制行
1
时,匹配任何一个或多个分隔符
\s+
,后跟一个或多个单词字符
\w+
,并将其替换为匹配的字符--2次,
&

对于基本正则表达式,您可以使用以下命令更粗略地执行相同的操作:

sed '1 s/[ \t][ \t]*[^ \t][^ \t]*/& &/g' file
匹配一个或多个空格或制表符,后跟一个或多个非空格或非制表符。(相同的输出,但它也复制了第一行中的省略号)

这可能适合您(GNU-sed):

用制表符替换所有2个或更多连续空格。将标题复制到保留空间并将其删除。将第二行附加到保留空间,并在第二行的每个选项卡后面加上空格。将第一行和第二行追加到第二行。模式空间中的第一行用作标题的模板。第一列是特殊的(ID),以非迭代方式复制。所有其他标题将被迭代替换,直到没有其他标题为止。删除第一行的最后一个选项卡和第二行的其余部分(标题的最后一列)。所有后续空格都将替换为选项卡


注意:所有列都将以制表符分隔,如果首选空格分隔,请将最后一个命令替换为
y/\t/

我想你实际上指的是
'1s/*/&&/g'
,而不是
'1s/*./&&/g'

在这种情况下,请记住,
*
是一个贪婪的量词,因此将匹配整行。要匹配行中的每个单词:

sed -e '1s/\w\+/& &/g'
看看这个例子,我们似乎不希望第一个单词(
ID
)像其他单词一样翻倍-只有前面有空格的单词:

sed -e '1s/ \+\w\+/&&/g'
输出:

ID sample1 sample1 sample2 sample2。。。
123    1 0     1 2    ...