mar*_*ria 0 python unix bash awk sed
我有这样一个(巨大的)文件:
test_file里面
a b
a c
a d
b a
b b
a g
a j
c g
Run Code Online (Sandbox Code Playgroud)
我试图根据第一个字段将其拆分为多个文件.但是,重复但不连续的值应该创建一个新文件(即每次字段1中的值相应于前一行时,应生成一个新文件).所以,在我之前的例子中,行:
a g
a j
Run Code Online (Sandbox Code Playgroud)
应该转到与以下文件不同的新文件:
a b
a c
a d
Run Code Online (Sandbox Code Playgroud)
最后,我将有4个文件,每个文件代表第一个字段中的一个变化:
A.1
a b
a c
a d
Run Code Online (Sandbox Code Playgroud)
B.2
b a
b b
Run Code Online (Sandbox Code Playgroud)
A.3
a g
a j
Run Code Online (Sandbox Code Playgroud)
C.4
c g
Run Code Online (Sandbox Code Playgroud)
实际上,如果标识符是:a.1,b.1,a.2,c.1或任何其他类型的后缀,它也会起作用.我想避免所述第二子集/组的一个值来替换/覆盖与所述第一组的所产生的前一个文件一个值.我也不想,所有的一个值附加到同一个文件.
我知道:
awk '{print > $1; close( $1)}' test_file
Run Code Online (Sandbox Code Playgroud)
将使用第一列拆分,但它也会在键相等时将结果附加到同一文件.
为了避免这个问题,我想添加另一个真正不同的字段.就像是:
test_file里面
1 a b
1 a c
1 a d
2 b a
2 b b
3 a g
3 a j
4 c g
Run Code Online (Sandbox Code Playgroud)
然后做:
awk '{print > $1"_"$2; close( $1"_"$2) }' test_file
Run Code Online (Sandbox Code Playgroud)
但我真的找不到办法,因为我认为关联数组在这种情况下不起作用.任何的想法?
听起来你可能想要这个:
awk '$1!=prev{ close(out); out="File_"$1"."(++cnt); prev=$1 } { print > out }' test_file
Run Code Online (Sandbox Code Playgroud)
但你的问题并不完全清楚.
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |