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

Shell/awk script to read a column of files and combining columns to make a TSV file

我有 600 多个文件,我需要从每个文件中提取单列并将它们写入输出文件。我当前的代码完成这项工作,它从所有文件中获取列并将列一个接一个地写入输出文件。但是,我的输出文件中需要两件事:

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

我的示例代码:

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

你可以这样使用 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) 
}
END {
   for(i=2; i<=FNR; i++)
      print a[i];
}' file*.txt

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