質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

4回答

4738閲覧

(Linux)ファイル内の特定列における文字列の入れ替え

marutech

総合スコア11

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2016/09/13 10:00

Linux OSにて、以下のようにCSVファイルを書き換えたいと考えております。

【変更前】

192.168.0.1,09/13/1602:52:22,132709,1,1,1,1,1 192.168.0.1,09/13/1602:52:23,132710,2,2,2,2,2 192.168.0.1,09/13/1602:52:24,132711,3,3,3,3,3 192.168.0.1,09/13/1602:52:25,132712,4,4,4,4,4 192.168.0.1,09/13/1602:52:26,132713,5,5,5,5,5

【変更後】

192.168.0.1,2016/09/13,02:52:22,132709,1,1,1,1,1 192.168.0.1,2016/09/13,02:52:23,132710,2,2,2,2,2 192.168.0.1,2016/09/13,02:52:24,132711,3,3,3,3,3 192.168.0.1,2016/09/13,02:52:25,132712,4,4,4,4,4 192.168.0.1,2016/09/13,02:52:26,132713,5,5,5,5,5

上記のように、複数列あるCSVファイルの2列目の文字列を組み換え、所定の日時フォーマットに置き換えたいのですが、sedなどの文字列操作のコマンドで特定列における文字列の組み換えの方法がわかりませんでした。

解決に向け、上記対応策についてご教示頂けますでしょうか。宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

//ネタ系の回答ということでひとつ…

Sh

1#!/bin/sh 2cat hoge.csv | tr ',' ' ' | \ 3while read p1 p2 p3 p4 p5 p6 p7 p8 p9 4do 5 m=`echo $p2 | cut -d'/' -f1` 6 d=`echo $p2 | cut -d'/' -f2` 7 y=`echo $p2 | cut -d'/' -f3` 8 y1=`echo $y | cut -c1-2` 9 y2=`echo $y | cut -c3-4` 10 echo $p1','$y2$y1'/'$m'/'$d','$p3','$p4','$p5','$p6','$p7','$p8','$p9 11done

投稿2016/09/13 11:56

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marutech

2016/09/14 03:41

ご回答頂きまして、ありがとうございます。 ネタ回答とのことで特徴的な内容ですが、これも1つの解だと思います。参考にさせて頂きます。
guest

0

ベストアンサー

こんな感じでどうですか?

sed 's@\([0-9][0-9]\)/\([0-9][0-9]\)/\([0-9][0-9]\)@20\3/\1/\2,@' infile.csv

投稿2016/09/13 10:35

ShinyaAnan

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marutech

2016/09/14 03:38

ご回答頂きまして、ありがとうございます。 こちらのご回答から知りましたが、sedの区切り文字は必ずしもスラッシュである必要はないのですね。今後活用させて頂きます。
guest

0

質問としては、丸投げ系になってしまっています。一度でも自分でトライされて、その結果をつけていただいたほうが良いかと思います。と言いながら、こうかな? (test.txt に問題のCSVが入ってるとして)

bash

1sed 's/^\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\),\([0-9][0-9]\/[0-9][0-9]\)\/\([0-9][0-9]\)\(.*\)$/\1,20\3\/\2,\4/' <test.txt

投稿2016/09/13 10:28

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marutech

2016/09/14 03:36

ご回答頂きまして、ありがとうございます。 また試行状況を記載出来ておらず、失礼致しました。以後質問の際はこちら十分に注意するように致します。
mit0223

2016/09/14 06:21

うるさいことを申しまして、すみません。よろしくお願いします。
guest

0

awk

awk

1awk 'BEGIN{FS = ","} {print $1 "," "20"substr($2,7,2)"/"substr($2,1,5)","substr($2,9)","$3","$4","$5","$6","$7","$8}' data.csv 2 3 4awk 'BEGIN{FS = ","} {str = $1 "," "20"substr($2,7,2)"/"substr($2,1,5)","substr($2,9)} {for(i = 3; i <= NF; i++){ str = str","$i}} {print str}' data.csv

投稿2016/09/13 10:26

omochi

総合スコア410

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marutech

2016/09/14 03:40

ご回答頂きまして、ありがとうございます。 awkコマンドでもこのようなケースの置換ができるんですね。。。参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問