Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 分开,但将分隔符保留几分钟_Awk_Split - Fatal编程技术网

Awk 分开,但将分隔符保留几分钟

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]}' 有了你们展示的样品,你们能试一下下面的吗。使

我有一个大文件,第一列的格式如下。可以有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]}'

有了你们展示的样品,你们能试一下下面的吗。使用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