将行合并到自定义行中

将行合并到自定义行中

输入:

ID   Name   NUMBER

1ABC234)234-2345,

2CBF23588900,

3knl334235354,

4gkmnk436563654,

期望的输出:

    *ID   Name   NUMBER            ID   Name   NUMBER       ID   Name   NUMBER*
LINE--1    1ABC234)234-2345,2CBF23588900,3knl334235354,
LINE--2    4gkmn436563654,5JNKN53546536,6jknk5643545645,
LINE--3    7........,8..........,9............,
LINE--4    10.........,11.......,12...........

我尝试使用这个命令,但不幸的是它把所有内容都变成了一行

tr -d '\n'<sample.txt

但我需要使用 unix 命令生成与上面所说的完全相同的文件。

答案1

假设您想要合并这些行,每个新行都包含输入文件中的三行,并且您希望保留相同的标题:

$ ( head -n 1 file; sed '1d' file | paste -d '\0' - - - ) >newfile
$ cat newfile
ID   Name   NUMBER
1ABC234)234-2345,2CBF23588900,3knl334235354,
4gkmnk436563654,line5,line6,
line7,line8,line9,

我使用的输入文件是

ID   Name   NUMBER
1ABC234)234-2345,
2CBF23588900,
3knl334235354,
4gkmnk436563654,
line5,
line6,
line7,
line8,
line9,

head命令仅输出文件的标头,而sedandpaste管道将剩余的行以三组为一组进行分配,而不插入任何分隔符。head然后,管道和管道的输出将被重定向到一个新文件。

如果您需要提到的特定标头,只需将完整head命令替换为echo 'insert header text here'.

如果您需要每行等,请传递throughLINE--1的结果:pasteawk '{ print "LINE--" NR, $0 }'

$ ( head -n 1 file; sed '1d' file | paste -d '\0' - - - | awk '{ print "LINE--" NR, $0 }') >newfile    
$ cat newfile
ID   Name   NUMBER
LINE--1 1ABC234)234-2345,2CBF23588900,3knl334235354,
LINE--2 4gkmnk436563654,line5,line6,
LINE--3 line7,line8,

相关内容