2017-07-26 17 views
0

2行目のCSVファイルの行を比較し、2行目のファイルの末尾に「一致が見つかりました」または 「見つからない」という出力を出力するスクリプトがあります。それは本当にうまくいっていましたが、最近何がうまくいかなかったのかCygwinを更新しました。今度はすべての行の次の行に出力を出力します。何かがCygwin-のPythonの新しいバージョンで変更され、そして以下Sed -iは新しい行を作成して出力を出力します

シェルいる私が使用していたコード行です:

sed -i "${lineNum}s/$/,Found/" file2.csv 

File1.csv 
abcd efgh ijkl 
mnop qrst xyz 

File2.csv 
abcd efgh ijkl  found 
mnop qrst xyzzz  not found 

を、それは上記のように印刷する必要があります。以下のように表示されます。

File2.csv 
abcd efgh ijkl 
    found 
mnop qrst  xyzzz  
    not found 

ご協力いただき誠にありがとうございます。

+3

これから動作するようにほぼ十分な情報ではありません - 実際の例を見ずデータがどんなものでなければならないのか、それが何であるのか、「出力を次の行に出力する」ということは実際には実際には意味しません。プロセスが誤っている入力の例(理想的には可能な限り小さな例)を提供するには[編集]してください。修正のための正確なコマンド。期待される出力。実際の出力[mcve]の作成に関するヘルプセンターのガイドをご覧ください。 –

+3

ところで、これが実際に行単位の比較を行っている場合、 'sed -i'を使うのはいい考えではないでしょう。コマンドを実行するたびに出力ファイル全体を一から書き直しています。 'comm'によって実装されたアルゴリズムに似たアルゴリズムを使用して、1回のパスで2つの入力から出力ファイルを生成する方がずっと効率的です。 –

+0

お寄せいただきありがとうございます。私はその質問を編集した。もう一度それを調べてください。 – Ashok

答えて

0

これは改行の問題のようです。 Windowsプラットフォームでは、改行シーケンスとして\r\nが使用されますが、UNIXプラットフォームでは\nのみが使用されます。ファイルに\r\nが含まれていて、コードが\rの後で\nの前にコンテンツを挿入している場合は、それが関係している可能性があります。

簡単な修正は最初のUNIX形式にファイルを変換することで、(必要に応じて)バック完了したら:

dos2unix file2.csv 
sed -i "${lineNum}s/$/,Found/" file2.csv 
unix2dos file2.csv ## if you want DOS-style newlines 
+0

偉大な...働いて...ありがとうございます! – Ashok

関連する問題