Shell / awk脚本用于读取一列文件并组合列以生成TSV文件

时间:2015-07-08 19:02:26

标签: shell calculated-columns

我有超过600个文件,我需要从每个文件中提取单个列并将它们写入输出文件中。我当前的代码执行此操作,它从所有文件中获取列并在输出文件中一个接一个地写入列。但是,我的输出文件中需要两件事:

  1. 在输出文件中,我不需要一个接一个地添加列,而是需要输入文件中的每一列都作为新列添加到输出文件中(最好是作为TSV文件)。
  2. 列名将替换为文件名。
  3. 我的示例代码:

    for f in *; do cat "$f" | tr "\t" "~" | cut -d"~" -f2; done >out.txt

    示例输入:

    file01.txt

    col1    col2    col3    
    1   2   3   
    4   5   6   
    7   8   9   
    10  11  12  
    

    file02.txt

    col4    col5    col6
    11  12  13
    14  15  16
    17  18  19  
    110 111 112
    

    我目前的输出:

    col2
        2
        5
        8
        11
    col5
        12
        15
        18
        111
    

    预期输出:

    file01.txt  file02.txt
    2   12
    5   15
    8   18
    11  111
    

1 个答案:

答案 0 :(得分:1)

您可以像这样使用awk:

awk -v OFS='\t' 'BEGIN {
   for (i=1; i<ARGC; i++)
      printf ARGV[i] OFS;
   print ARGV[i];
} 
FNR==1 { next }
{
   a[FNR]=(a[FNR]==""?"":a[FNR] OFS) $2
}
END {
   for(i=2; i<=FNR; i++)
      print a[i];
}' file*.txt

file01.txt  file02.txt
2   12
5   15
8   18
11  111