Awk 根据特定列中的修改拆分表文件

Awk 根据特定列中的修改拆分表文件,awk,split,gnu,Awk,Split,Gnu,我有这样的桌子: classA, s1, ss1 classA, s1, ss2 classA, s2, ss1 classB, s1, ss1 classB, s1, ss2 classC, s1, ss1 classC, s2, ss1 classC, s2, ss2 我想根据第1列中的连续值将其拆分为3个文件,分别称为“classA”、“classB”和“classC”。我首先尝试使用csplit来找到一种方法,但它似乎只在指定的模式上工作,而不是在模式改变时工作。是否有任何awk方法或

我有这样的桌子:

classA, s1, ss1
classA, s1, ss2
classA, s2, ss1
classB, s1, ss1
classB, s1, ss2
classC, s1, ss1
classC, s2, ss1
classC, s2, ss2
我想根据第1列中的连续值将其拆分为3个文件,分别称为“classA”、“classB”和“classC”。我首先尝试使用csplit来找到一种方法,但它似乎只在指定的模式上工作,而不是在模式改变时工作。是否有任何awk方法或其他命令行工具可以做到这一点

[更新] 在我的第一列中,我也有一些斜杠导致了这个错误,例如:

classA, s1, ss1
classA, s1, ss2
classA, s2, ss1
classB, s1, ss1
classB, s1, ss2
classC, s1, ss1
classC, s2, ss1
classC, s2, ss2
classA/classA.1/classA.2, s1, ss1
classA/classA.1/classA.2, s1, ss2
当我运行命令时:

awk -F, '{ print $0 > $1}' infile
它在“classC”之前一直工作,但我有这个错误,因为我猜它将“/”解释为路径:

fatal: can't redirect to `classA/classA.1/classA.2' (No such file or directory)
输出

-rw-r--r-- 1 shellter root  48 Sep 13 14:01 classC
-rw-r--r-- 1 shellter root  32 Sep 13 14:01 classB
-rw-r--r-- 1 shellter root  48 Sep 13 14:01 classA
如果$1有“/…/path/info,请重试

awk -F, '{ outFile="$1"; gsub(/\//, "", outFile); print $0 > outFile }' infile
如果不执行
gsub()
,则任何“/”字符都将勇敢地跟随一个路径来创建输出文件。当然,指定的路径必须存在,否则您将收到相应的错误消息

请注意,有些AWK更喜欢使用“/”字符,如
gsub(/[\/],“”,fileName)
,或者您甚至可能需要
[\/]
作为搜索目标


IHTH

此脚本仅创建一个名为“$1”的文件“,这是我的infle的副本。我在第一列中有一些带有“/”的值,这会在写入相应文件时造成麻烦。有没有办法绕过这个子问题?请用准确的错误信息编辑你的Q,用新的要求编辑一条记录。问题是它们不是路径。但没关系,我会在前后使用sed,比如:sed's/\//g'infie | awk-F,{print$0>1}';sed-i's//\//g'*@LostInTranslation:无需使用
sed
。使用AWK的
gsub
功能。在任何情况下,都不需要在末尾使用
sed
,因为在AWK命令中没有输出到
stdout
awk -F, '{ outFile="$1"; gsub(/\//, "", outFile); print $0 > outFile }' infile