Shell 使用AWK拆分CSV文件,同时读取其他文件以命名输出文件

Shell 使用AWK拆分CSV文件,同时读取其他文件以命名输出文件,shell,csv,awk,Shell,Csv,Awk,我有一个CSV文件,如下所示: group1, item1 group1, item2 group2, item3 group1, item4 ..... 我已设法将此文件按组拆分为单独的csv文件(group1.csv.dat、group2.csv.dat等)。每个文件包含属于特定组的所有项 group1.csv.dat: item1, true item2, true item4, true ..... group2.csv.dat: item3, true ..... 我使用了以下A

我有一个CSV文件,如下所示:

group1, item1
group1, item2
group2, item3
group1, item4
.....
我已设法将此文件按组拆分为单独的csv文件(group1.csv.dat、group2.csv.dat等)。每个文件包含属于特定组的所有项

group1.csv.dat:

item1, true
item2, true
item4, true
.....
group2.csv.dat:

item3, true
.....
我使用了以下AWK:

awk -F, '{print $2",true" > $1".csv.dat"}' file1
现在,我有第二个文件(比如文件2),如下所示:

group1, GRFS+NC, 4
group2, GRTU+NC, 6 
....
如何使用AWK读取此文件,以便将第一步中创建的文件命名为
GRFS4.csv.dat、GRTU6.csv.dat而不是group1.csv.dat、group2.csv.dat?最好,我想将处理纳入第一步。非常感谢……

您需要这样未经测试的产品:

awk -F, '{split($2,a,"+");print $2",true" > a[1]""$3".csv.dat"}' file2
awk '
NR==FNR{ name[$1] = $3 $6 ".csv.dat"; next }
{ print $2 ",true" > name[$1] }
' FS='[, +]' file2 FS=',' file1

只需计算file2中的字段,以确保$3和$6是正确的字段。添加一个调试for循环,将它们全部打印出来,以查看您是否不确定。

小心,文件名中会出现尾随空格。谢谢您的回答。这将仅基于文件2中的信息生成文件。我想做的基本上是重命名我问题中AWK生成的文件(例如,取group1.csv.dat,在file2中查找“group1”,并通过连接相关字段将group1.csv.dat重命名为GRFS4.csv.dat),输出重定向右侧的未括号连接产生未定义的行为。你需要用括号括起来。另外,
a[1]
$3
之间的空字符串(
“”
)完全没有作用。