2017-01-04 13 views
0

最近、いくつかのデータ項目が99個のパイプで区切られたtxtファイルを受け取っていますが、そのうち一部の例ではdataaddress.txtを例として使用します。例:txtファイルの復帰方法を削除する

14メークアップロード

ハル

HU99 9HU

それは3行ではなく1に出goming、中負担データは、パイプで区切られた、このアドレスの前と後がありました。 SSISを使用して修正したtxtファイルを嫌うという問題を引き起こしているのは、このアドレスの問題のようです。

ソースに戻すのではなく、txtファイルを操作してこれらのキャリッジリターンを削除する方法があるかどうか疑問に思っていましたが、行末の戻り値が意味をなさない場合には影響しません。

答えて

1

sedまたはawkを使用します。より多くのプラットフォームに依存しないので、awkでこれを行う方法を説明します。 awkがない場合は、http://invisible-island.net/mawk/mawk.htmlからmawkバイナリをダウンロードできます。

考え方は次のとおりです。awkには、行区切り文字が改行や改行ではないことを伝えてください。私はコンマを使用します。

好きではない文字列を置き換える正規表現を使用します。

私が作成したテストファイルです。 test.txtとして保存します。

1,Line before ... 
2,Broken line ... 14 MakeUp Road 

Hull 

HU99 9HU 
3,Line after 

、次のようにawkを呼び出す:私はあなたがcleanup.awkという名前のファイルにawkのコードを保存することを示唆している

 
    awk 'BEGIN { RS = ","; ORS=""; s=""; } $0 != "" { gsub(/MakeUp Road[\n\r]+Hull[\n\r]+HU99 9HU/, "MakeUp Road Hull HU99 9HU"); print s $0; s="," }' test.txt 

を。ここでは、より良い形式のコードを説明しています。

awkのファイルを使用して
BEGIN { 
    # This block is executed at the beginning of the file 
    RS = ","; # Tell awk our records are separated by comma 
    ORS=""; # Tell awk not to use record separator in the output 
    s="";  # We will print this as record separator in the output 
} 

{ 
# This block is executed for each line. 
# Remember, our "lines" are separated by commas. 

# For each line, use a regular expression to replace the bad text. 
gsub(/MakeUp Road[\n\r]+Hull[\n\r]+HU99 9HU/, "MakeUp Road Hull HU99 9HU"); 

# Print the replaced text - $0 variable represents the line text. 
print s $0; s="," 
} 

次のように、あなたは、交換を実行することができます。複数のファイルを処理する

awk -f cleanup.awk test.txt 

、あなたはbashスクリプトを作成することができます:あなたが使用することができます

for f in `ls *.txt`; do 
    # Execute the cleanup.awk program for each file. 
    # Save the cleaned output to a file in a directory ../clean 
    awk -f cleanup.awk $f > ../clean/$f 
done 
0

sed改行文字とキャリッジリターン文字を削除します。

sed ':a;N;$!ba;s/MakeUp Road[\n\r]\+/MakeUp Road /g' test.txt | sed ':a;N;$!ba;s/Hull[\n\r]\+/Hull /g' 

説明:

  1. ''
  2. Nラベルを作成は、パターンスペースに
  3. $を次の行を追加!最後の行でない場合、baブランチ(行く)ラベル 'a'
  4. s代替コマンド\ nは改行を表し、\ rは改行を表し、[\ n \ r] + - 改行または/ gグローバルマッチ(できるだけ多くの回数)。

sedは最後の行に達するまでステップ1から3をループし、すべての行をsedがすべての\ n文字を置換するパターンスペースに収まるようにする

関連する問題