从第二行开始将每 3 行组合在一起,并从组合的第二行和第三行中删除第一列

iwd*_*mer 4 linux bash sed

我对 UNIX 以及一般编码都很陌生,并且花了很长时间试图解决这个问题,但没有成功。我确信这是一个非常简单的解决方案,但如果有人可以帮助我指出正确的方向。

我有一个 Summary.txt 文件,其中包含以下格式的数据

Name criteria1 2 3 4 5 6 7 8 9 10
Sample12345 w x y z
Sample12345.avg l m n
Sample12345.stdn o p q
Sample98765 w2 x2 y2 z2
Sample98765.avg l2 m2 n2
Sample98765.stdn o2 p2 q2
Run Code Online (Sandbox Code Playgroud)

等等等等

我想组合相同样本编号的三行,并且只保留名字:

Name criteria1 2 3 4 5 6 7 8 9 10
Sample12345 w x y z l m n o p q
Sample98765 w2 x2 y2 z2 l2 m2 n2 o2 p2 q2
Run Code Online (Sandbox Code Playgroud)

等等等等

我尝试过使用 sed,例如(在首先制作包含所有 Sample12345.avg Sample12345.stdn 等的 Summary_temp.txt 之后):

for i in `cat Summary_temp.txt`; do sed 's/\n$i//g' Summary.txt; done 给出“-bash:意外标记'sed'附近的语法错误”

我也尝试过走这条路

paste -sd ' ' Summary.txt | sed 's/\t/\n/g10; s/\t/@/g; s/\n/\t/g' | sed 's/.\nSample.*.avg//g' | head

我相信我得到的最接近的是:

cat Summary.txt | sed 's/ *| */,/g;/^$/d' | paste -d, - - - | head
Run Code Online (Sandbox Code Playgroud)

然而,这从第一行开始,所以所有内容都减一:

Name criteria1 2 3 4 5 6 7 8 9 10
Sample12345 w x y z l m n o p q
Sample98765 w2 x2 y2 z2 l2 m2 n2 o2 p2 q2
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了 head -1 Summary.txt > Summary_temp_3.txt ,所以我可以稍后将其添加回来。

sed '1d' Summary.txt > Summary_temp_4.txt
cat Summary_temp_4.txt | sed 's/ *| */,/g;/^$/d' |
  paste -d, - - - | sed 's/,.*_by_name//g | head
Run Code Online (Sandbox Code Playgroud)

这根本没有显示出任何东西;我最终必须按 ctrl-C,所以假设它是错误的,因为它不应该花那么长时间。请帮忙。我知道我是一个初学者,这可能是一个很容易解决的愚蠢问题,但我不知道还能尝试什么。

ste*_*ver 10

它不是特别优雅,但是对于第二行到最后一行 ( 2,$),将Next 行和Next 行拉入模式空间,然后g全局替换换行符后面的任何非空白序列:

sed '
2,${
N
N
s/\n[^[:blank:]]*//g
}
' Summary.txt
Name criteria1 2 3 4 5 6 7 8 9 10
Sample12345 w x y z l m n o p q
Sample98765 w2 x2 y2 z2 l2 m2 n2 o2 p2 q2
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 6

paste+方法sed可能是(假设文件不包含,字符):

$ paste -sd '\n,,' your-file | sed 's/,[^[:blank:]]*//g'
Name criteria1 2 3 4 5 6 7 8 9 10
Sample12345 w x y z l m n o p q
Sample98765 w2 x2 y2 z2 l2 m2 n2 o2 p2 q2
Run Code Online (Sandbox Code Playgroud)