2012-09-13 42 views
2

我有这样的表:拆分根据具体的修改列一个表文件

classA, s1, ss1 
classA, s1, ss2 
classA, s2, ss1 
classB, s1, ss1 
classB, s1, ss2 
classC, s1, ss1 
classC, s2, ss1 
classC, s2, ss2 

,我想在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) 

回答

3
awk -F, '{ print $0 > $1}' infile 

输出

-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

+0

该脚本只创建一个名为“$ 1”的文件,它是我的infile的副本。 – LostInTranslation

+0

好的,删除双$ 1引号可以更好地工作。 – LostInTranslation

+0

我在第一列有一些'/'的值,这在写入相应的文件时很麻烦。有没有办法解决这个子问题? – LostInTranslation