Ila*_*ino 3 awk perl text-processing
我有一个制表符分隔的文件,其中每一行都有:
K00001;K00004;K00008 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
Run Code Online (Sandbox Code Playgroud)
我想要一行具有唯一代码和相同的数字序列,如下所示:
K00001 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
K00004 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
K00008 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
Run Code Online (Sandbox Code Playgroud)
您可以使用 awk 拆分第一列:
~$ awk '{split($1,a,";"); $1="";for (i in a){print a[i],$0}}' myfile
K00001 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
K00004 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
K00008 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
Run Code Online (Sandbox Code Playgroud)
您在;
( split($1,a,";")
)上拆分第一列,然后将其删除,以便$0
为数组中的每个项目打印整个(新)行 ( )。
正如评论中所建议的,编辑后,我们可以看到使用制表符作为分隔符。要将 tab 用作输出字段分隔符,您可以使用OFS="\t"
,例如在BEGIN
awk的部分中。此外,插入一个空字段$1=""
。因此,与其打印a[i]
then $0
,不如设置$1
为a[i]
then 打印$0
:
~$ awk 'BEGIN{OFS="\t"}{split($1,a,";"); for (i in a){$1=a[i];print}}' myfile
K00001 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
K00004 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
K00008 0 0 34 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 52 0 0 0 6 0
Run Code Online (Sandbox Code Playgroud)