如何在制表符分隔的文件中将行转置为列?

Ann*_*met 3 command-line text-processing

我有一个制表符分隔的文件,其中有一个数字和属于同一行上相同数字的名称。编号和名称由制表符分隔。这些名称通过 2 个下划线 ( __)相互连接。它看起来像这样:

33  Hhe.1__Hhe.2__Hhe.3__Hhe.4
Run Code Online (Sandbox Code Playgroud)

我想将它(通过使用命令行)转换为这个输出:

33  Hhe.1
33  Hhe.2
33  Hhe.3
33  Hhe.4
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 6

awk

$ awk -F '\t|__' '{for (i=2;i<=NF;i++) {printf "%s\t%s\n", $1, $i}}' foo.txt 
33  Hhe.1
33  Hhe.2
33  Hhe.3
33  Hhe.4
Run Code Online (Sandbox Code Playgroud)
  • 我们根据制表符 ( \t) 或两个下划线 (__ )。
  • 然后我们循环从第二个字段到最后一个字段,并打印每个字段,并以第一个字段和制表符为前缀。