将列打印到多行awk

将列打印到多行awk,awk,split,row,csh,Awk,Split,Row,Csh,我在这个问题上坚持了很长时间。我有一个输入文件,其中有很多行是这样的 <594711> <name> <duyduy> <SV> <RUN> <AL_Ptime> </common/sAS> <lsf_login07> </shsv/DASA> <594712> <name> <thanhthanh> <SV> <RUN> <

我在这个问题上坚持了很长时间。我有一个输入文件,其中有很多行是这样的

<594711>
<name>
<duyduy>
<SV>
<RUN>
<AL_Ptime>
</common/sAS>
<lsf_login07>
</shsv/DASA>
<594712>
<name>
<thanhthanh>
<SV>
<RUN>
<AL_Ptime>
</common/NDWQ>
<lsf_login07>
</shsv/CXZC>

我的愿望是这样划船。它在作业ID之后重复

<594711> <RUN> <AL_Ptime> <lsf_login07> </shsv/DASA>
<594712> <RUN> <AL_Ptime> <lsf_login07> </shsv/CXZC>

遵循
awk
代码可能会在同样的方面帮助您

awk '
/<\/shsv\/[a-zA-Z]+>/{
  val=val?val OFS $0:$0;
  print val;
  flag="";
  next
}
/<[0-9]+>/{
  flag=1;
  val=$0;
  next
}
val && (($0 ~ /<RUN>/) || ($0 ~ /<AL_Ptime>/) || ($0 ~ /<lsf_login07>/)){
  val=val?val OFS $0:$0
}
'   Input_file
awk'
//{
val=val?val OFS$0:$0;
打印val;
flag=“”;
下一个
}
//{
flag=1;
val=$0;
下一个
}
val&($0~/)| |($0~/)| | |($0~/)){
val=val?val OFS$0:$0
}
'输入文件
输出如下

<594711> <RUN> <AL_Ptime> <lsf_login07> </shsv/DASA>
<594712> <RUN> <AL_Ptime> <lsf_login07> </shsv/CXZC>

编辑:也在此处添加代码解释

awk '
/<\/shsv\/[a-zA-Z]+>/{   ##Search for string shsv with alphabets till their group in a line, then do following.
  val=val?val OFS $0:$0; ##create variable named val whose value is current line when val is NULL else it will concatenating its own value with each line.
  print val;             ##printing variable val here.
  flag="";               ##making variable flag as NULL here.
  next                   ##Using next will skip all statements further.
}
/<[0-9]+>/{              ##Search <digits till group and if it is TRUE then do following.
  flag=1;                ##Setting variable flag to 1 now.
  val=$0;                ##making variable val as current line.
  next                   ##Using next will skip all statements further.
}
val && (($0 ~ /<RUN>/) || ($0 ~ /<AL_Ptime>/) || ($0 ~ /<lsf_login07>/)){ ##Checking if variable val is NOT NULL AND (either current line is string <RUN> OR <AL_Ptime> OR <lsf_login07>) then do following.
  val=val?val OFS $0:$0  ##create variable named val whose value is value of current line if va; is NULL else it will concatenate its own value with current line.
}
' Input_file            ##Mentioning the Input_file name here.
awk'
//{###用字母搜索字符串shsv,直到它们的组排成一行,然后执行以下操作。
val=val?val OFS$0:$0;##创建名为val的变量,当val为空时,该变量的值为当前行,否则它会将自己的值与每行连接起来。
打印val;##在此处打印变量val。
flag=“”;##在此处将变量标志设置为NULL。
next##使用next将进一步跳过所有语句。
}

//{###搜索请显示您的代码。我甚至不知道要获取它的命令我从代码grep-oE']+>'文件中获得了输入。我考虑使用Paste-s,但它似乎不起作用。为什么
lsf_login07
出现在第二行,它不出现在第二组
中?欢迎使用堆栈溢出!您似乎在问为您编写一些代码。Stack Overflow是一个问答网站,不是一个代码编写服务。请学习如何编写有效的问题。@Lucil120,np,现在检查我的解决方案。请不要在评论中发布您的尝试,在您的帖子中发布,以便所有人都能看到。享受学习吧!!您能解释一下吗在我的行val=val?val of s$0:$0中,输入可能在@Lucil120处更改,我现在也添加了相同的解释。如果您有任何疑问,请告诉我。