2

すべての列に実際の値の後に不要なスペース(またはタブ)が含まれているCSVファイルがあります。bashを使用してすべてのスペースを削除する新しいCSVファイルを作成したいと思います。

例えば

入力CSVファイルの1行

abc def pqr             ;valueXYZ              ;value PQR              ;value4

出力csvファイルの同じ行は

abc def pqr;valueXYZ;value PQR;value4

awkを使用して各列をトリミングしようとしましたが、機能しませんでした。誰かがこれについて私を助けてくれますか?

前もって感謝します :)

ここの値にはスペースを含めることができるため、テストケースを編集しました。

4

5 に答える 5

4
$ cat cvs_file | awk 'BEGIN{ FS=" *;"; OFS=";" } {$1=$1; print $0}'
  1. 入力フィールド区切り記号 ( FS) を、0 個以上のスペースとそれに続くセミコロンの正規表現に設定します。
  2. 出力フィールド区切り文字 ( OFS) を単純なセミコロンに設定します。
  3. $1=$1リフレッシュする必要があり$0ます。
  4. 印刷し$0ます。

$ cat cvs_file
abc def pqr             ;valueXYZ              ;value PQR              ;value4

$ cat cvs_file | awk 'BEGIN{ FS=" *;"; OFS=";" } {$1=$1; print $0}'
abc def pqr;valueXYZ;value PQR;value4
于 2012-06-27T20:28:31.580 に答える
2

値自体に常にスペースがない場合、(私の見解では) 標準的な解決策は次を使用することtrです。

$ tr -d '[:blank:]' < CSV_FILE > CSV_FILE_TRIMMED
于 2012-06-27T14:48:55.240 に答える
1

これにより、複数のスペースが 1 つのスペースに置き換えられます。

sed -r 's/\s+/ /g'
于 2012-06-27T14:51:47.550 に答える
0

列データの末尾がわかっている場合は、これが確実な方法です。

sed 's|\(.*[a-zA-Z0-9]\) *|\1|g'

文字クラスは、データが終了するものを配置する場所になります。

それ以外の場合、フィールドに複数のスペースが入らないことがわかっている場合は、user1464130 が提供したものを使用できます。

これで問題が解決しない場合は、ご連絡ください。

于 2012-06-27T15:12:50.753 に答える