使用第1行第ith列作为输出文件名awk

时间:2018-11-13 11:17:34

标签: awk command-line

我是一个非常新的命令行用户,因此我需要一些帮助来使用awk按列拆分文本文件。对我来说,困难在于我希望ith文件名成为ith列第一行的文本。

这就是我的想法:

awk '{for(i = 2; i <= NF; i++){name= ??FNR == 1 $i?? ;print $1, $i > name}}' myfile.txt

但是我不知道如何设置名称变量...

输入:myfile.txt

'ID'    'sample_1' 'sample_2' ...
'id_1'      1            2    ...
'id_2'      2            3    ...

期望的输出:

sample_1.txt:

'ID'    'sample_1'
'id_1'      1      
'id_2'      2  

sample_2.txt:

'ID'    'sample_2'
'id_1'      2      
'id_2'      3 

谢谢

2 个答案:

答案 0 :(得分:0)

您应将列标题保留在数组中。

\x27
  • gensub(/\x27/, "", "g", $i)是十六进制转义形式的单引号
  • sorted从列标题中删除单引号,以根据需要命名输出文件。

答案 1 :(得分:0)

您可以尝试这个awk:

awk -F'\t' '                              # tab as field separator
{
  for ( i = 2 ; i <= NF ; i++ ) {         # for each record loop from field 2 to last field
    if ( NR == 1 ) {                      # if first record
      a[i] = $i                           # keep each field in array a
      gsub ( /^'\''|'\''$/ , "" , a[i] )  # remove quote at start and end in array a
      }
    print $1 FS $i > a[i]".txt"           # print needed field in corresponding file
  }
}' myfile.txt