我有一个大文件,其中第一列是以下格式。可以用"_“隔开3-6个不同的id
s1_asd_ucsd
b4_asd_id_vu
c10_id_js_uw
d4_sch_vu我想把这一栏分成两栏。列2包含最后一个id,第1列包含初始id;类似于下面
s1_asd ucsd
b4_asd_id vu
c10_id_js uw
d4_sch vu我知道如何通过以下方式打印最后一列;但不知道如何在保留分隔符的同时打印之前的I。
awk '{n=split($1, b, "_"); }{ print b[n]}'发布于 2021-04-19 20:24:30
您所展示的样品,请您试一试。用GNU awk编写和测试,应该可以在任何awk中工作。
awk 'match($0,/.*_/){print substr($0,RSTART,RLENGTH-1),substr($0,RSTART+RLENGTH)}' Input_file简单的解释是:使用awk的match函数在每一行中匹配直到最后一次出现_,然后在打印其子字符串时,在最后一个_之前打印删除它,然后打印行的其余部分(以及匹配的部分和rest部分之间的空格)。
发布于 2021-04-19 21:34:59
使用贪婪匹配模式的简单sed解决方案:
sed -E 's/(.+)_(.+)/\1 \2/' file
s1_asd ucsd
b4_asd_id vu
c10_id_js uw
d4_sch vuhttps://stackoverflow.com/questions/67168828
复制相似问题