Bash 如何以“;”分隔第二列并附加第一列值
做这件事最好最简单的方法是什么 我有两列tsv文件:Bash 如何以“;”分隔第二列并附加第一列值,bash,awk,split,text-processing,data-processing,Bash,Awk,Split,Text Processing,Data Processing,做这件事最好最简单的方法是什么 我有两列tsv文件: id1<\tab>name1;name2;name3 id2<\tab>name11;name22;name3 id3<\tab>name111;name2;name3333 我想更改列顺序namesid,将第一列拆分为“;”并将相应的id追加到每一行。我的意思是: name1<\tab>id1 name2<\tab>id1 name3<\tab>id1 name11&
id1<\tab>name1;name2;name3
id2<\tab>name11;name22;name3
id3<\tab>name111;name2;name3333
我想更改列顺序namesid,将第一列拆分为“;”并将相应的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'{对于i=2;i在每个Unix框的任何shell中使用任何awk,一个选项是将字段分隔符设置为同时包含制表符和分号
awk-F'[\t;]'-vofs='\t'{对于bash解释器中的i=2;i-
while IFS="$IFS;" read -a c;do for n in 1 2 3; do echo "${c[$n]} ${c[0]}"; done<file
或
我可以说printf%s\t$id\n$n1$n2$n3,但在bash解释器中,将变量嵌入格式字符串通常是个坏主意…-
while IFS="$IFS;" read -a c;do for n in 1 2 3; do echo "${c[$n]} ${c[0]}"; done<file
或
我本可以说printf%s\t$id\n$n1$n2$n3,但将变量嵌入格式字符串通常不是一个好主意…欢迎这么做,请务必在问题中以代码的形式添加您的努力,这在SOnot my downvote btw上是非常受鼓励的,谢谢。欢迎这么做,请在您的问题中以代码的形式添加您的努力,这就是非常鼓励SOnot我的下一票,顺便说一句,谢谢。首先是姓名,然后是ID。切换顺序。尽管如此,点仍然有效。@PaulHodges:好的点,谢谢。@EdMorton:谢谢编辑,是的,确实看起来我混淆了RS和FS中的限制。关于空格也很好。首先是姓名,然后是ID。切换顺序。点仍然有效,不过。@PaulHodges:说得好,谢谢。@EdMorton:谢谢你的编辑,是的,确实看起来我把RS中的限制和FS混淆了。关于空格也说得好。