12345 みたいなデータから、 YYYY/MM/DD HH:mm:ss,12345 みたいなデータを生成したい。
cronでデータを取ってきて、grep -oPで適当なデータを抽出し、CSVの末尾に1行追加したいときの話。
方法1. 変数を使う(簡単!)
kuro@ubuntu:~$ date=`date +"%Y/%m/%d %T"` kuro@ubuntu:~$ contents=12345 kuro@ubuntu:~$ echo "$date,$contents" 2017/09/21 02:25:26,12345
方法2. echoとバッククオートを使う
最後のcatは標準入力を受け取っています。
kuro@ubuntu:~$ echo 12345 | echo "`date +\'%Y/%m/%d %T\'`,`cat`" 2017/09/21 02:43:48,12345
似たような方法が他にも何通りかあります。お好きなものをご利用ください。
kuro@ubuntu:~$ echo 12345 | echo "$(date +'%Y/%m/%d %T'),$(cat)" 2017/09/21 02:58:53,12345 kuro@ubuntu:~$ echo 12345 | paste -d , <(date +"%Y/%m/%d %T") <(cat) 2017/09/21 02:59:21,12345
方法3. awkを使う方法
こちらを参考に。
http://qiita.com/nii_yan/items/2ee949d0e48da11eed17
kuro@ubuntu:~$ echo 12345 | awk '{ "date +\"%Y/%m/%d %T\"" | getline var; print var "," $0 }' 2017/09/21 02:51:18,12345
この方法だと複数行にも対応できます。
kuro@ubuntu:~$ cat contents.txt 123 456 789 kuro@ubuntu:~$ cat contents.txt | awk '{ "date +\"%Y/%m/%d %T\"" | getline var; print var "," $0 }' 2017/09/21 03:12:02,123 2017/09/21 03:12:02,456 2017/09/21 03:12:02,789
bashは色々な方法があって面白いですね。bash初心者なのでもっと簡単な方法があるかも。