如何解决如何用';'分割第二列并附加第一列值
最好和最简单的方法是什么?
id1<\tab>name1;name2;name3
id2<\tab>name11;name22;name3
id3<\tab>name111;name2;name3333
我想更改列顺序 ((names)id),将第一列用 ';' 拆分并将相应的 id 附加到每一行。我的意思是这样的:
name1<\tab>id1
name2<\tab>id1
name3<\tab>id1
name11<\tab>id2
name22<\tab>id2
name3<\tab>id2
name111<\tab>id3
name2<\tab>id3
name3333<\tab>id3
感谢您的帮助!
解决方法
在每个 Unix 机器上的任何 shell 中使用任何 awk,一种选择是将字段分隔符设置为包括制表符和分号。
awk -F'[\t;]' -v OFS='\t' '{for (i=2; i<=NF; i++) print $i,$1}' file
样品运行:
$ cat -A file
id1^Iname1;name2;name3$
id2^Iname11;name22;name3$
id3^Iname111;name2;name3333$
$ awk -F'[\t;]' -v OFS='\t' '{for (i=2; i<=NF; i++) print $i,$1}' file | cat -A
name1^Iid1$
name2^Iid1$
name3^Iid1$
name11^Iid2$
name22^Iid2$
name3^Iid2$
name111^Iid3$
name2^Iid3$
name3333^Iid3$
,
在 bash 解释器中 -
while IFS="$IFS;" read -a c;do for n in 1 2 3; do echo "${c[$n]} ${c[0]}"; done<file
或
while IFS="$IFS;" read id n1 n2 n3; do printf "%s\t%s\n" $n1 $id $n2 $id $n3 $id; done<file
我可以说printf "%s\t$id\n" $n1 $n2 $n3
,但是将变量嵌入到格式字符串中通常是个坏主意...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。