更新时间:2023-12-05 15:35:52
$ cat file
0 k__Bacteria p__Firmicutes c__Bacilli foo bar
1 k__Bacteria p__Firmicutes c__Clostridia the quick brown
2 k__Bacteria p__Bacteroidetes c__Bacteroidia fox jumped over
3 k__Bacteria p__Bacteroidetes c__Bacteroidia the lazy dogs back
$ awk -v skip=1 '{match($0,"([^[:space:]]+[[:space:]]+){"skip"}"); head=substr($0,1,RSTART+RLENGTH); tail=substr($0,RSTART+RLENGTH+1); gsub(/[[:space:]]+/,";",tail); print head tail}' file
0 k__Bacteria;p__Firmicutes;c__Bacilli;foo;bar
1 k__Bacteria;p__Firmicutes;c__Clostridia;the;quick;brown
2 k__Bacteria;p__Bacteroidetes;c__Bacteroidia;fox;jumped;over
3 k__Bacteria;p__Bacteroidetes;c__Bacteroidia;the;lazy;dogs;back
$ awk -v skip=2 '{match($0,"([^[:space:]]+[[:space:]]+){"skip"}"); head=substr($0,1,RSTART+RLENGTH); tail=substr($0,RSTART+RLENGTH+1); gsub(/[[:space:]]+/,";",tail); print head tail}' file
0 k__Bacteria p__Firmicutes;c__Bacilli;foo;bar
1 k__Bacteria p__Firmicutes;c__Clostridia;the;quick;brown
2 k__Bacteria p__Bacteroidetes;c__Bacteroidia;fox;jumped;over
3 k__Bacteria p__Bacteroidetes;c__Bacteroidia;the;lazy;dogs;back
$ awk -v skip=3 '{match($0,"([^[:space:]]+[[:space:]]+){"skip"}"); head=substr($0,1,RSTART+RLENGTH); tail=substr($0,RSTART+RLENGTH+1); gsub(/[[:space:]]+/,";",tail); print head tail}' file
0 k__Bacteria p__Firmicutes c__Bacilli;foo;bar
1 k__Bacteria p__Firmicutes c__Clostridia;the;quick;brown
2 k__Bacteria p__Bacteroidetes c__Bacteroidia;fox;jumped;over
3 k__Bacteria p__Bacteroidetes c__Bacteroidia;the;lazy;dogs;back