2016-11-30 8 views
-1

私は次のように彼らは、私は上の日付を修正しようとしているいくつかのCSV抽出物を持っている:シェルスクリプトを使用してcsv出力の日付を取り除く方法は?

"Time Stamp","DBUID" 
2016-11-25T08:28:33.000-8:00,"5tSSMImFjIkT0FpiO16LuA" 

最初の列は常に「タイムスタンプ」、私はそれように、この変換したいです"2016-11-25"の日付のみを保持し、 "T08:28:33.000-8:00"を削除します。

最終的な結果は次のようになり..

"Time Stamp","DBUID" 
2016-11-25,"5tSSMImFjIkT0FpiO16LuA" 

は異なる日付を持つファイルがたくさんあります。

kshでこれを行う方法はありますか?いくつかの種類のループごとにすべてのファイルをループし、長いタイムスタンプを置き換え、日付だけを残しますか?ここで

+0

行全体を印刷します:例では、これは、日付部分

印刷$ 0ですか? –

+0

あなたは、あなたの日付の精度をあまり失う心配はないと思いますか? 「2016-11-25」は、時間帯に応じて、その日の13時間前から11時間後の任意の時間にすることができます。 – ghoti

+0

また、何を試しましたか?あなたの問題解決に役立つコードはありません。 – ghoti

答えて

0

使用すると、sedの:

$ sed '2,$s/T[^,]*//' file 
"Time Stamp","DBUID" 
2016-11-25,"5tSSMImFjIkT0FpiO16LuA" 

をどのように動作します:

2,$   # Skip header (first line) removing this will make a 
       # replacement on the first line as well. 
    s/T[^,]*// # Replace everything between T (inclusive) and , (exclusive) 
       # `[^,]*' Matches everything but `,' zero or more times 
+0

私はすでにsedを使って何か他のことをしているので、これと一緒に行ったので、既存のコマンドに別のパイプ/ sedを追加するのが最も簡単でした。説明ありがとう。 – v3rd1ct

+0

@ v3rd1ct 'sed 'を最初に使うことができます。 'sed 'の' sed'、 '' sed -e ''の最初の' 'e'''、' 'sed''の' 'sed' –

0

は、標準のAIXユーティリティを使用して一つの解決策、

awk -F, -v OFS=, 'NR>1{sub(/T.*$/,"",$1)}1' file > file.cln && mv file.cln file 

出力

"Time Stamp","DBUID" 
2016-11-25,"5tSSMImFjIkT0FpiO16LuA" 

ません(しかし、私はもうこれだけawk私の地元でテストし、AIX環境へのアクセス権を持っています) 。

NR>1はヘッダー行をスキップし、sub()は最初のフィールド(最初のカンマまで)に限定されます。末尾の1awkの略で{print $0}です。

データレイアウトが変更され、データに余分なカンマがある場合は、修正が必要な場合があります。

sedを使用してIHTH

0

sed -i "s/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\).*,/\1-\2-\3,/" file.csv 

出力:

"Time Stamp","DBUID" 
2016-11-25,"5tSSMImFjIkT0FpiO16LuA" 

-i編集ファイルインプレース

s代替

0

これはawkための完璧な仕事ですが、前の回答とは違って、私はsubstring機能を使用することをお勧めします。

awk -F, 'NR > 1{$1 = substr($1,1,10)} {print $0}' file.txt 

説明

-F、:-Fフラグは、この場合には、フィールドセパレータを設定コンマ

NR> 1:最初の行を無視

$ 1:最初のフィールドを参照

$ 1 = substr($ 1,1,10):最初のフィールドをフィールドの最初の10文字に設定します。これはsed`は溶液であるカント `使用

関連する問題