Linux 如何对多个文件使用剪切命令并将结果粘贴到不同的文件中

Linux 如何对多个文件使用剪切命令并将结果粘贴到不同的文件中,linux,cut,Linux,Cut,你能帮助我如何在多个文件中剪切多个字段并将结果粘贴到另一个文件中吗 file1: A Pass Fail B Pass Fail C Fail Fail D Pass Pass file2: A Pass Pass B Fail Pass C Pass Pass D Pass Pass file 3: A Fail Fail

你能帮助我如何在多个文件中剪切多个字段并将结果粘贴到另一个文件中吗

       file1:
       A Pass Fail
       B Pass Fail
       C Fail Fail
       D Pass Pass

      file2:
      A Pass Pass
      B Fail Pass
      C Pass Pass
      D Pass Pass

      file 3:
      A  Fail Fail
      B  Pass Pass
      C  Pass Fail
      D  Pass Pass

    Expected:
    A Pass Fail Pass Pass Fail Fail
    B Pass Fail Fail Pass Pass Pass
    C Fail Fail Pass Pass Pass Fail
    D Pass Pass Pass Pass Pass Pass
我尝试了下面的选项,但它不起作用 剪切-f 2-3文件2 |剪切-f 2-3文件3 |粘贴文件1-

paste file1.txt file2.txt file3.txt | tr "\t" " " | cut -f1,2,3,5,6,8,9 -d" "
这将导致:

A Pass Fail Pass Pass Fail Fail
B Pass Fail Fail Pass Pass Pass
C Fail Fail Pass Pass Pass Fail
D Pass Pass Pass Pass Pass Pass
简要说明:

粘贴文件1.txt文件2.txt文件3.txt
将合并您的文件选项卡

A Pass Fail     A Pass Pass     A Fail Fail
B Pass Fail     B Fail Pass     B Pass Pass
C Fail Fail     C Pass Pass     C Pass Fail
D Pass Pass     D Pass Pass     D Pass Pass
tr“\t”“”
将选项卡替换为空格。然后
cut-f1,2,3,5,6,8,9-d”“
将获得您想要的列。

Awk替代方案:

awk '{ map[$1]=map[$1]" "$0 } END { for (i in map) { gsub(" "i,"",map[i]);print i" "map[i] } }' file1 file2 file3
创建一个名为map的数组,以第一个空格分隔的字段作为索引,并附加每个文件中由空格分隔的行作为值。在处理文件结束时,循环映射数组,使用gsub从值中删除索引,然后打印结果值