bashでのunixtime変換について

このQ&Aのポイント
  • bashでのunixtime変換について質問です。下記のようなunix時間と数値が記載されたテキストがあり、unix時間を変換する必要がありました。
  • catコマンドとawkコマンドを使用して、2行でunix時間を変換しました。しかし、1行で実行するための方法や変換後の書式について質問しています。
  • unixtime.txtのunix時間を「%Y-%m-%d %H:%M:%S」の形式に変換する方法についてお知恵をいただきたいです。
回答を見る
  • ベストアンサー

bashでのunixtime変換について

bashでのunixtime変換について質問です。 下記のようなunix時間と数値が記載されたテキストがあり、 unix時間を変換する必要がありました。 ※ここではunix時間のみ変換したかった # more unixtime.txt 1387875600 10 13 15 1387879200 27 19 26 1387882800 14 17 19 1387886400 22 16 14 そこで下記のように2行で変換しました。 cat unixtime.txt | awk '{print $1}' >>unix.txt cat unix.txt | awk '{print strftime("%Y-%m-%d %H:%M:%S",$1)}' >>time.txt そこで質問です。 (1)2行で実行したコマンドを1行で実行するにはどのように書けばいいのでしょうか。  ワンライナーでかっこ良く書きたい・・・・です。 (2)unixtime.txtのunix時間を変換して"%Y-%m-%d %H:%M:%S"+数値の形式とするには どのように書けばいいのでしょうか。 お手数ですが皆様のお知恵をおかしいただきたく。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

パイプを知っているのにパイプを知らないとは、どういうことなんですかね。 もとのままを出来るだけ変えないで1行にすれば、 cat unixtime.txt | awk '{print $1}' | awk '{print strftime("%Y-%m-%d %H:%M:%S",$1)}' >>time.txt 普通は、 awk '{print strftime("%Y-%m-%d %H:%M:%S",$1)}' unixtime.txt > time.txt

gnomezine
質問者

お礼

notnotさん 返信遅れてすみません。 記載ありがとうございました。 ワンライナーで解決できました。 パイプの使い方がまだ理解できませんでした。 ありがとうございました。

関連するQ&A

  • UNIXで数字の文字列を、数値に変換するには?

    UNIXで、数字のみの文字列を、その文字列で表される数値に変換して変数に代入したいのですが、どうすればいいでしょうか? つまり、 VALUE=`echo 22j4444j33 | awk -F'j' '{print $1}'` <VALUEに入った"22"を22の数値に変換> exit $VALUE というようなことがしたいです。 よろしくお願いします。

  • awkで可変文字列をマッチング

    シェルなどでawkを使う際に、シェルの引数として渡された文字列をawkに渡し、それを条件にマッチングをかけたいのですが、どうしたら良いのでしょうか?(まあ、素直にgrepを使えばいいのですが・・・) 例えば、 cat foo.txt | awk '{if ($2 == ptn) print}' ptn=$<シェルの引数> とかやれば、2番目のフィールドに完全に一致する行が抽出できるのですが、 cat foo.txt | awk '/ptn/ {print}' ptn=$<シェルの引数> とかやっても、"ptn"という文字列をマッチングしてしまうので、うまくいきません。どの位置に出現するかわからないけど、シェルの引数で指定された文字列が含まれている行だけを出力したい場合、どうしたらよいのでしょう・・・。

  • bash: ファイル名と現在時刻との比較

    bash で, ファイル名が  TIME1307658220.txt と,UNIXTIMEが含まれているファイルについてですが, `date '+%s'` などで現在時間を読み込んで,今から1時間前以内の時間が名前に含まれていれば, それらをmv で移動させたいのです. たぶん cut とか,を使って,5文字目から14文字目までを抜き出して数値化して比較しないといけないとおもうのですが,うまくいかないです. よろしくお願いいたします.(><)

  • ディレクトリ内の全てのファイルの中身を操作したい

    ディレクトリ内に、例えば10個のテキストファイル a.txt b.txt c.txt d.txt e.txt f.txt g.txt h.txt i.txt j.txt があり、その中身にそれぞれ 2 6 98 65 4 52 98 100 82 56 という数字が書かれているとします。 これらのファイルの中身の平均をawkを用いたコマンドで表示させたいのですが、自分なりに頑張ったのですが実行できませんでした。 (cat * | awk'{BEGIN{total += $0; i += 1}END{print total/i}' のような感じで) どうすれば実行できるのか、よろしければお教えください。

  • awk in csh

    cshスクリプトの中で、awkと連動させたプログラムを書こうとしています。 以下の様なテーブルファイル(hoge.txt)があると想定してください。 1 0.01 0.52 3.23 ..... 2 0.22 9.34 8.22 ..... 3 0.44 0.68 3.81 ..... ... (列も行も揃っている数値だけのテーブル) 例えば、変数hogeに第2行、第2列の数値(文字列)0.22を代入する際、 シェルスクリプト内部で、 @ hoge = `awk 'NR==2' {print $2} hoge.txt` としましたが、$2をスクリプトに与えられた2番目の引数だと解釈して、 うまく動作しません。 試しに$2 -> \$2に変換してみましたが、ダメでした。 (\の後に改行がないというエラーが出ました) 第i列目,j行目の文字列を取り出すにはどのようにすれば良いでしょうか。

  • windowsXP --> FedoraCore1 漢字変換について

    SJISのtextファイルを、メールに添え付けて、 Linuxに送って、nkfでEUCに変換しようとしたところ うまくいきません。 nkf -e sjis.txt これでは、うまくいきませんでした。 nkf -unix sjis.txt これでは、標準出力ですが、うまく変換できています。 それで、 nkf -unix sjis.txt >/tmp/a.txt を、実行したところ、出力ファイルの中は、 変換できていませんでした。 sjis.txtは、windowsのメモ帳で、 "あいうえお"と、書いただけです。 よろしくお願いいたします。

  • 文字変換で,を改行されないようにしたい

    下記のスクリプトでファイルから読み込んだ行毎の文字列<>を'=>'に変換後、行の先頭に'を付け足し行の最後に',を付け加えた場合、変な風に改行されてしまいます。 $ cat list1.txt 01<>ああああ 01_01<>あAAA 01_02<>あBBB 01_03<>あCCC 01_04<>あDDD 02<>いいいい 02_01<>いAAA 02_02<>いBBB 02_03<>いCCC 02_04<>いDDD open(IN, "<list1.txt"); @datas = <IN>; close(IN); open(OUT, ">date.txt"); foreach (@datas) { ($a, $b) = split(/<>/, $_); print OUT "'$a'=>'$b',"; } close(OUT); 実行結果 $ cat date.txt '01'=>'ああああ ','01_01'=>'あAAA ','01_02'=>'あBBB ','01_03'=>'あCCC ','01_04'=>'あDDD ','02'=>'いいいい ','02_01'=>'いAAA ','02_02'=>'いBBB ','02_03'=>'いCCC ','02_04'=>'いDDD ', これを下記のように整形するにはスクリプトのどこを直せばよいのでしょうか。 '01'=>'ああああ', '01_01'=>'あAAA', '01_02'=>'あBBB', '01_03'=>'あCCC', '01_04'=>'あDDD', '02'=>'いいいい', '02_01'=>'いAAA', '02_02'=>'いBBB', '02_03'=>'いCCC', '02_04'=>'いDDD', どなたかご教授お願い致します。(上記のスクリプト以外の方法で スマートなやり方などありましたらあわせてご教授頂けますと助かります。)

    • ベストアンサー
    • Perl
  • C言語でテキストファイルのデータ処理

    はじめまして。 僕はC言語に関して全くの初心者です。 どうぞよろしくお願いします。 例えば、 1,0,0,7,6 2,0,0,5,5 3,1,0,4,9 : : のようなテキストファイル、test.txtがある時、 1行目の4カラム目(7)と5カラム目(6)を、 それぞれの行について差し引くプログラム、 つまり全ての行について4カラム目は7を引き、 5カラム目は6を引くプログラムの事で、 この例では、 1,0,0,0,0 2,0,0,-2,-1  3,1,0,-3,-3 : : となるようなプログラムを書き、結果を出力したいのですが、よく分かりません。 ちなみにawkで書いて実行すると、 (プログラム名はtest.awkとする) BEGIN{ i=0; } { while(i<1){ v3 = $4; v4 = $5; i++; } print $1,$2,$3,($4 - v3),($5 - v4); } 実行するプログラム↓ awk -f test.awk test.txt という感じなのですが…。 これを上述の様に、C言語でプログラムを書いて、 実行するには、例えばどのようなプログラムを書けば いいのでしょうか? なにぶん初心者のため、分からない事だらけですが、 よろしくお願いしますm(__)m

  • 「awk」で複数のファイルの特定行を変換する方法

    初心者です。 「awk」又は「perl」を使って a.txt、b.txt…z.txtの中の1行目10カラム目の値を 全て「a」という値に一括で変換する方法を教えて下さい。 よろしくお願いします。

  • N行以上重複している行のみを表示したい

    ファイル(test.txt)の中身に以下のようにIPアドレスがランダムに並んでいて、 この中から、5回以上出現しているIPを抽出して表示したいです。 # cat test.txt 111.111.111.111 222.222.222.222 333.333.333.333 444.444.444.444 111.111.111.111 111.111.111.111 333.333.333.333 444.444.444.444 222.222.222.222 111.111.111.111 333.333.333.333 222.222.222.222 444.444.444.444 333.333.333.333 111.111.111.111 # cat test.txt |sort | uniq -c で、 出現回数と、そのIPが表示されました。 しかし「5回以上出現」という条件をつける方法がわかりませんでした。 単純に、5回以上出現しているIPだけを表示したいのですが、 uniq以外でも、awk sed などで、単純なコマンドでワンライナーで実現したいです。 どうぞアドバイスを宜しく御願いいたします。