1

サードパーティのシステムからのファイルがありますが、少し修正する必要があります。今後のファイルには、データの途中に改行文字が含まれることがあります。この破損した行を見つけることができたとしましょう。私がする必要があるのは、単に改行文字を削除し、その行を上の行と結合することです(これは、改行文字を削除するときに発生します)。次に例を示します。

data_1 data_2 data_3 data_4 data_5
data_1 data_2 data_3 data_4 data_5
data_1 data_2 
 data_3 data_4 data_5
data_1 data_2 data_3 data_4 data_5
data_1 data_2 data_3 data_4 data_5
data_1 data_2 data_3 data_4 data_5

ご覧のとおり、3行目は間違っており、改行文字を削除して4行目で修正/結合する必要があります。「間違った」(短すぎる)行を見つけることができる簡単なスクリプトがあります。問題は、特定の行から改行文字を削除する方法です(行番号が間違っています)。

前の3が行番号であるsed( sed ':a;N;$!ba;3s/\n/ /' data.log)で試しましたが、機能しません。s

...または多分この問題のより良い解決策があります。助けてください。

4

3 に答える 3

3

新しい行の先頭のスペースを利用して、sedを使用してそれを行うことができます

sed -e '{
N
s/\n //
}' data.log

これにより、偽の改行がどこにあるかを事前に知る必要はありませんが、1 つの改行のみが修正されます (行が 3 つに分割されている場合は機能しないため)。

于 2013-01-11T15:50:19.993 に答える
2

特定の行から改行文字を削除する方法 (行番号が間違っています)

ターゲットの行番号を把握している場合は、awk を使用してこれを行うことができます。

awk -v N=3 '{if (NR==N) l=$0; else if (NR==N+1) print l $0; else print}' infile
于 2013-01-11T15:44:04.687 に答える
2

これは実際には要求したものではありませんが、破損した行を自動的に見つけて修正します。colパラメータを設定して、期待する列数を設定するだけです

awk -v col=5 '
           { 
               if ((cur + NF) < col) 
               { 
                   printf($0); 
                   cur=cur+NF; 
               } 
               else 
               { 
                   print $0; 
                   cur=0; 
               } 
           }' your_file
于 2013-01-11T15:50:48.697 に答える