从文件中读取列并附加另一个文件的特定列

从文件中读取列并附加另一个文件的特定列

我有两个这样的文件:

文件A:

Name,Site Name,Product UPEI,Product Name,NMS Flag,Product Model, SW

文件B:

NE_Name       SW   
ABC           4.4
ASD           4.3
...           ...

请注意,fileA 仅由一行组成,并且具有多个标头(例如,名称、站点名称等)。而 fileB 有 2 个行数巨大的字段。

我想将这两个文件组合起来:

输出文件:

Name,Site Name,Product UPEI,Product Name,NMS Flag,Product Model, SW
ABC,,,,,,4.4
ASD,,,,,,4.3

因此,输出文件将具有 fileA 中存在的所有标头,并将扩展字段:“Name”(使用从 fileB 获取的“NE_Name”值)和“SW”(使用从 fileB 获取的“SW”值)。

如何从上面提到的 2 个输入文件中获取这个输出文件?

答案1

这是一种方法awk

$ awk -F, 'NR==1{nf=NF-1; print $0; FS=" "} \
         NR>2{printf("%s%.*s%s\n",$1,nf,",,,,,,,,,,,,,,,,,",$2)}' fileA fileB

Name,Site Name,Product UPEI,Product Name,NMS Flag,Product Model, SW
ABC,,,,,,4.4
ASD,,,,,,4.3

关键部分是printf我们打印 fileB 中的第一个和第三个字段,并用,从第一个文件中获取的数字分隔nf=NF-1

答案2

tail -n+2 fileB | sed -r 's/[[:space:]]+/,,,,,,/' | cat fileA - > Output

说明

tail -n +2 fileB从第二行开始写入 fileB 的末尾,因为我们想忽略第一行。

sed,使用-r, --regexp-extended(表示+元字符含义 '最后一个') 将第一组空格字符替换为示例中预期的逗号数量。

cat最后连接 fileA 和通过管道接收的数据sed(称为 )-,并将其写入,该数据根据您的请求stdout重定向到文件。Output

局限性

如果 NE_Name 或 SW 列中有空格字符,则不起作用。

答案3

另一种sed方法:

$ sed 's/   */,,,,,,,/;/NE_/d' fileA fileB
Name,Site Name,Product UPEI,Product Name,NMS Flag,Product Model, SW
ABC,,,,,,,4.4
ASD,,,,,,,4.3

第一个sed命令用 7 个逗号替换 3 个或更多空格,第二个命令删除任何匹配的行NE_

相关内容