【发布时间】:2021-02-08 09:00:23
【问题描述】:
我有几十个文件(例如 fA.txt、fB.txt 和 fc.txt),并且想要 fALL.txt 中所示的输出。
fA.txt: id V W X Y Z 1 2 4 8 16 b 3 6 13 17 18 c 5 1 20 4 8 fB.txt: id F G H J K 2 5 9 7 12 b 4 9 12 3 19 c 6 13 2 40 7 fC.txt: id L M N O P 7 2 19 8 16 b 8 6 12 23 47 c 91 11 15 19 80 期望的输出 下降.txt: id fA_V fB_F fC_L 1 2 7 b 3 4 8 c 5 6 91 id fA_W fB_G fC_M 一个 2 5 2 b 6 9 6 1 13 11 id fA_X fB_H fC_N 一个 4 9 19 乙 13 12 12 20 2 15 id fA_Y fB_J fC_O 一个 8 7 8 b 17 3 23 c 4 40 19 id fA_Z fB_K fC_P 16 12 16 b 18 19 47 c 8 7 80我在这个站点上看到了以下 AWK 代码,它适用于只有 2 列的输入文件。
'NR==FNR{a[FNR]=$0; next} {a[FNR] = a[FNR] OFS $2} END{for (i=1;i<=FNR;i++) print a[i]}' file1 file2 file3 就我而言,我对上面的内容进行了如下修改,它适用于提取第二列:
'NR==FNR{a[FNR]=$1 OFS $2; next} {a[FNR] = a[FNR] OFS $2} END{for (i=1; i<=FNR; i++) print a[i]}' file1 file2 file3 我已尝试将上述内容放入 for 循环中以提取后续列,但未成功。任何有用的提示将不胜感激。
所需输出中的第一个数据块是每个输入文件的第二列,其标题与相应输入文件中的文件名和列标题连接。随后的块是每个输入文件的第三、第四、第五列。
【问题讨论】:
-
欢迎来到 SO,感谢您在问题中分享您的努力。您能否在您的问题中(不在 cmets 中)提及获取示例显示输出的逻辑,因为不清楚您如何获得预期的输出,谢谢。
-
按要求添加逻辑
-
这还不清楚。我们如何将输出分成更小的部分?显而易见且自然的安排是使用单个矩阵,如果您发现要提取的新特征在其中添加更多列(或者更自然的倒矩阵,您为每个新特征添加一行,为每个新特征添加一个新列文件)。
标签: shell for-loop multidimensional-array awk