Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Bash 如何以“;”分隔第二列并附加第一列值_Bash_Awk_Split_Text Processing_Data Processing - Fatal编程技术网

Bash 如何以“;”分隔第二列并附加第一列值

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&

做这件事最好最简单的方法是什么

我有两列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<\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混淆了。关于空格也说得好。