Awk 分开,但将分隔符保留几分钟
我有一个大文件,第一列的格式如下。可以有3-6个不同的id,以“\u1”分隔 我想把这一栏分成两栏。第2列包含最后一个id,第1列包含初始id;像吼叫Awk 分开,但将分隔符保留几分钟,awk,split,Awk,Split,我有一个大文件,第一列的格式如下。可以有3-6个不同的id,以“\u1”分隔 我想把这一栏分成两栏。第2列包含最后一个id,第1列包含初始id;像吼叫 s1_asd ucsd b4_asd_id vu c10_id_js uw d4_sch vu 我知道如何通过以下方式打印最后一列;但是不知道如何在保留分隔符的同时打印以前的ID awk '{n=split($1, b, "_"); }{ print b[n]}' 有了你们展示的样品,你们能试一下下面的吗。使
s1_asd ucsd
b4_asd_id vu
c10_id_js uw
d4_sch vu
我知道如何通过以下方式打印最后一列;但是不知道如何在保留分隔符的同时打印以前的ID
awk '{n=split($1, b, "_"); }{ print b[n]}'
有了你们展示的样品,你们能试一下下面的吗。使用GNU
awk
编写和测试,应在任何awk
中工作
awk 'match($0,/.*_/){print substr($0,RSTART,RLENGTH-1),substr($0,RSTART+RLENGTH)}' Input_file
简单的解释是:使用awk
的match
功能在每一行中匹配到最后一次出现\u
,然后在打印其子字符串时,在最后一次\u
之前将其删除,然后打印行的其余部分(以及匹配部分和其余部分之间的空间).使用GNU awk:
awk 'BEGIN{FS=OFS="_"} {last=$NF; NF--; print $0 " " last}' file
保存最后一个字段,从当前行中删除最后一个字段,输出当前行,输出三个空格并追加保存的最后一个字段
输出:
s1_asd ucsd
b4_asd_id vu
c10_id_js uw
d4_sch vu
s1_asd ucsd
b4_asd_id vu
c10_id_js uw
d4_sch vu
请参阅:使用贪婪匹配模式的简单
sed
解决方案:
sed-E的/(.+)(+)/\1\2/”文件
s1_asd ucsd
b4_asd_id vu
c10_id_js uw
d4_sch vu
谢谢@anubhava。当我有多个列并且第一列是我想要拆分的列时,我可以使用这个命令吗?是的,当然可以使用sed-E的/^([^]+)(+)对这个命令进行调整以满足这样的要求/\1\2/'file
我的文件来自在多个位置采集的患者样本,因此有时会有多个列,第一列是我需要拆分的列。我认为FS=OFS=“\u1”不适用于此类文件。
s1_asd ucsd
b4_asd_id vu
c10_id_js uw
d4_sch vu