1

ヘッダーの後にレコードがほとんどない .CSV ファイルがありますが、ファイルの末尾の直前に重複ヘッダーがあり、その重複ヘッダーの後にいくつかのレコードがあります (これは必要ありません)。2 度目に発生したヘッダーのパターンを確認し、その重複したヘッダーの後に残りのファイルを削除する方法はありますか? 以下はファイルの例です。

col0,col1, col2, col3 , col4 , col5, col6 ,
1value0,1value1,1value2,1value3,1value4,1value5,1value6,
2value0, 2value1, 2value2, 2value3, 2value4, 2value5, 2value6, 3value
, 3value1, 3value2, 3value3, 3value4, 3value5, 3value6,
2value0, 4value1, 4value2, 4value3, 4value4, 4value5, 4value6, 5value0, 5value1, 5value2, 5value3, 5value4, 5value5,
5value6, 6value0, 6value1, 6value2,
6value3, 6value4, 6value5, 6value6,
,, ,,,,,
,,,,,,
,,,,,,,
(n-1)値0、(n-1)値1、(n-1)値2、(n-1)値3、(n-1) 1)値4、(n-1)値5、(n-1)値6
、(n)値0、(n)値1、(n)値2、(n)値3、(n)値4、(n)値5、(n )値6,
col0,col1, col2, col3 , col4 , col5, col6 ,
1,unwanted, records, after, the, duplicate, header
2,unwanted, records, after, the, duplicate, header
3,unwanted, records, after, the,複製、ヘッダー

ここで私が期待している出力を以下に示します

col0,col1, col2, col3 , col4 , col5, col6 ,
1value0,1value1,1value2,1value3,1value4,1value5,1value6,
2value0, 2value1, 2value2, 2value3, 2value4, 2value5, 2value6, 3value
, 3value1, 3value2, 3value3, 3value4, 3value5, 3value6,
2value0, 4value1, 4value2, 4value3, 4value4, 4value5, 4value6, 5value0, 5value1, 5value2, 5value3, 5value4, 5value5,
5value6, 6value0, 6value1, 6value2,
6value3, 6value4, 6value5, 6value6,
,, ,,,,,
,,,,,,
,,,,,,,
(n-1)値0、(n-1)値1、(n-1)値2、(n-1)値3、(n-1) 1)値4、(n-1)値5、(n-1)値6
、(n)値0、(n)値1、(n)値2、(n)値3、(n)値4、(n)値5、(n )値6,

PS: GNU sed バージョン 4.1.5 と GNU Awk 3.1.5 があります。

どんな助けでも大歓迎です。

4

4 に答える 4

2

おそらく必要以上に複雑です:

awk 'BEGIN{flag=0} $0==head{flag=1}; NR==1{head=$0}; flag==0{print $0}' file
于 2013-07-31T14:24:03.720 に答える
2

これはうまくいくかもしれません(GNU sed 4.2.1):

sed 's/,/\n/8;T;s/\n.*//;q' file

これは、8 番目をそれ自体で置き換えようとする,ことで機能し、それが失敗した場合は、通常どおり行を救済して印刷します。ほとんどの行(あなたの例では)には7つのコンマしかないため、そのまま残されますが、重複したヘッダーを含む行は短縮され、処理が終了すると出力されます.

于 2013-07-31T14:09:02.980 に答える
0

試す

awk 'd<2{print} /col1, col2, col3 , col4 , col5, col6/{d++}' file
于 2013-07-31T14:04:27.157 に答える