问题描述
你能帮我如何在多个文件中剪切多个字段并将结果粘贴到另一个文件中
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
我尝试了以下选项,但它不起作用 cut -f 2-3 file2 | cut -f 2-3 file3 |粘贴文件 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
简短说明:
paste file1.txt file2.txt file3.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,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 从值中删除索引,然后打印结果值。