1 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/03(木) 17:54:23.25 .net] シェルスクリプトの総合スレです。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。 bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 ・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています 最新の仕様はこちらへ pubs.opengroup.org/onlinepubs/9699919799/ (左上の「Shell & Utilities」 から参照することができます。) ・v7 shに一番近くて、現役(?)のshは、OpenSolaris由来のheirloom sh。 src.illumos.org/source/xref/illumos-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) ・シェルスクリプトのことをシェルってゆうな □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも awkまたはperlの方が適した処理にはそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 □回答者への注意事項: ・シェルスクリプトでの処理方法を質問しているのに、よくわからずに 「そういうのはperl使いましょう」と回答するのはやめましょう。 安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。 質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう 前スレ シェルスクリプト総合 その26 https://mevius.5ch.net/test/read.cgi/unix/1489979246/
135 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 04:09:24.19 .net] お知恵お借りしたいです。 awk '($3 !~ /ここにパイプ区切りで記述したい/) && ($4 ~ /01/)' output.txt 上記のawkで条件に当てはまるファイルを絞り込みたいのですが その1 別ファイルからのawkの結果を $aaa に設定してある その2 $aaa は複数列の出力なので set コマンドにて位置パラメータに分けてある その3 各変数を展開して文字列としてパイプで区切ってawkを使いたい。 以上のようなことをやってみたのですがどうもうまく行きません。 また、違うやり方もあるようでしたらご教示いただけるとありがたいです。 よろしくお願いします。
136 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 04:35:42.94 .net] > $aaa は複数列の出力なので set コマンドにて位置パラメータに分けてある これはどういう意味? set はシェル自身の設定だと思うんだけども
137 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 05:07:26.79 .net] cat ZZZ.txt |grep XXX hoge fuga と複数行でしたので aaa=$(cat ZZZ.txt |grep XXX) としてみました。 そして set $aaa と設定して $1 $2 $3 ...と変数が自動で割り振られるなら増減しても対応できるのでは考えました。 (本来は0個のときもあるのでそれも考慮しなければならないんですが) そして $1 等に入っている変数(hogeやfuga) を展開してパイプで区切れれば動くと思うんです。
138 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 07:13:03.91 .net] ごめん俺の理解が悪いと思うのだがあなたのやりたいことが見えない。 他の人にまかせるわ。 もしくはZZZ.txtの内容をプライバシーに障らない程度に具体的に教えてほしい。 「ZZZ.txtからgrepで取り出した値をパイプで連結して処理する」という文言からは ZZZ.txtには命令が一行ずつ書かれているように受け取れるのだが、そうじゃないよね。 それとも「パイプで繋ぐ」というのはシェルのパイプ実行ではなく単に文字列としてパイプを区切りとして使うという意味? もしそうなら $ cat ZZZ.txt | grep XXX | tr '\n' '|' | sed 's/|$//1' ↑こういうので行けるけど。違うでしょ?
139 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 07:35:37.60 .net] 説明がヘタですみません。ZZZ.txtの中身はyoutube等の URL タイトル 日付 がタブ区切りで複数行書かれているファイルです。 123.com hoge 02 456.com fuga 05 789.com peke 08 のような感じです。 それらから条件から当てはまる行や列を抜き出してパイプ区切りにしたいのです。 パイプの解釈は hoge|fuga で hoge or fuga と展開して awkのパターン入れて読ませたい訳です。
140 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 08:23:21.90 .net] >>137 なるほどね。こういうこと? (ZZZ.txtの代わりにヒアドキュメント使ってる) $ cat <<. | awk '($2 ~ /(hoge|fuga)/) && ($3 ~ /02/) {print}' example111.com hoge 02 example222.com hoge 03 456.com fuga 05 456example.com fuga 02 789.com peke 08 . example111.com hoge 02 456example.com fuga 02
141 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 09:09:37.27 .net] 勉強不足でヒアドキュメントの知識が浅くて申し訳ないのですが 多分合ってると思います。 うまくいかないのは hoge|fuga の部分が一定でなく peke|hoge|miso だったり fuga のみだったりするので悩ましいのです。
142 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 09:53:14.80 .net] 条件をコマンドの結果から作りたい&その条件をawkの条件に埋め込みたいってだけ? hogehuga=( $(cat ZZZ.txt |grep XXX) ) SAVEIFS=$IFS IFS=$'|' hogehuga="${hogehuga[*]}" IFS=$SAVEIFS [ "$hogehuga" = "" ] && hogehuga="0個の条件" awk '($3 !~ /'"$hogehuga"'/) && ($4 ~ /01/)' output.txt って感じとか
143 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 10:05:05.40 .net] ああ、条件の作成は>>136 の最後ですでにワンライナーで教えているのか。しつれい
144 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 10:44:16.45 .net] >>139 そのhoge|fugaはどこから来るの? grep(1)コマンドの結果?
145 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 10:58:04.08 .net] >>135 の最初で説明してね?>>135-137 は噛み合ってないだけかなw というか、>>136 の確認/質問のキモがわかってないというか
146 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 11:18:16.86 .net] 条件文の | をパイプとかいうからわけわかんなくなる
147 名前:133 mailto:sage [2018/05/26(土) 11:49:32.72 .net] そういう場合はパイプって言わないんですか。失礼しました。 正規表現でつかう or の役割を hoge fuga の間には挟みたいのです。
148 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:01:23.51 .net] >>145 >>136 >$ cat ZZZ.txt | grep XXX | tr '\n' '|' | sed 's/|$//1' >↑こういうので行けるけど。違うでしょ? って教えてくれてるやん。「違わない」「それです」でいいんじゃないの?それが違うならどう違うって言うべき
149 名前:かと(どうみても違わないとしか思えないけど) 質問自体がアレだが自分の言いたいことをうまく説明できないのはいいとして、応えてくれてる人の言ってることがわからない/それに応えないのはアレだな [] [ここ壊れてます]
150 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:03:34.81 .net] awkの手前で別途 fgrep -f か egrep -f を使った方が、改行→「|」変換をサボれて楽な気がする。 fgrep/egrep -f を使うときは bashないし zsh 依存になるけど fgrep -f <(grep XXX ZZZ.txt) と書くともっと楽だね。
151 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:10:12.44 .net] \じゃないよバックスラッシュだよ というのがありそうな気もしないでもない
152 名前:133 mailto:sage [2018/05/26(土) 12:32:36.46 .net] シェルスクリプト内で自動で行いたい旨を 書き損じておりました。 cat ZZZ.txt |grep XXX hoge fuga から awk '($3 !~ /hoge|fuga|neko/) && ($4 ~ /01/)' output.txt としたいのです。 >>146 >$ cat ZZZ.txt | grep XXX | tr '\n' '|' | sed 's/|$//1' でまさしく狙い通りの出力がされるのですが>>133 のawkのパターン部にどうかけば同じ文字列が出せるかわかりません
153 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:38:10.49 .net] awk の文はただの文字列でしかない awk '($3 !~ /'"$aaa"'/) && ($4 ~ /01/)' output.txt でも、 awk "(\$3 !~ /${aaa}/) && (\$4 ~ /01/)" output.txt でも(他にエスケープ必要なのあるかな?)、 普通にシェル変数を(文字列内に)展開するのと変わらんぞ
154 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:42:16.30 .net] 書き損じどうこうじゃなくて、受け応えができないのが致命的ではあるなw
155 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/26(土) 12:44:02.94 .net] よく見たら、 hoge fuga から hoge|fuga|neko って、nekoはどこから来たっていう。まあうっかりだろけど
156 名前:133 mailto:sage [2018/05/26(土) 13:37:00.34 .net] みなさん申し訳ありません >>150 のレスを見てクォートをよ〜く見なおしたら動きました。 初心者のたわごとに付きあわせてしまい申し訳ありませんでした。
157 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/27(日) 08:08:25.73 .net] nekoです。nekoはいます。
158 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/30(水) 15:51:14.73 .net] 寝た子は起こすな 寝子は起こすな
159 名前:名無しさん@お腹いっぱい。 [2018/05/30(水) 20:03:13.31 .net] sedコマンドでSGRを扱いたいんですがどうすればいいですか。 $ echo abc | sed 's/^a/\033[1m&\033[0m/1' などとしてaを太字にしたりしたいです。
160 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/30(水) 20:16:35.46 .net] echo abc | sed -e 's/^a/'$'\033[1m&'$'\033[0m/1'
161 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/05/30(水) 21:08:39.87 .net] 横からだが、 なんのこっちゃと思ったら $'' はエスケープ文字処理してくれんのね。なるほど 最初のだけでいいのでは?もしくは最初に付ける。もしくは逐一付けて閉じる echo abc | sed -e 's/^a/'$'\033[1m&\033[0m/1' echo abc | sed -e $'s/^a/\033[1m&\033[0m/1' echo abc | sed -e 's/^a/'$'\033''[1m&'$'\033''[0m/1' と思いました
162 名前:156 mailto:sage [2018/05/31(木) 06:51:45.12 .net] ありがとうございます。解決しました。 これは後出しになってしまいますが、POSIXの範囲でやりたかったので $''ではなく$(printf)を使いました。
163 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/02(土) 23:56:12.94 .net] 英語圏の序数詞を適切に処理するシェルスクリプト(というかワンライナー)を考えたのですが添削してください $ for i in $(seq 15); do echo $i$(case $i in *1) echo st;; *2) echo nd;; *3) echo rd;; *) echo th;; esac); done 出力は一応望み通りでまたPOSIX utils+seq(1)のみで実行可能です。
164 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/03(日) 00:35:29.50 .net] 11st とか 12nd になってるけどそれはいいの?
165 名前:名無しさん@お腹いっぱい。 [2018/06/03(日) 00:38:58.53 .net] なにいっとるんやこいつw
166 名前:名無しさん@お腹いっぱい。 [2018/06/03(日) 01:12:42.26 .net] なにいっとるんやってなにいっとるんやww
167 名前:160 mailto:sage [2018/06/03(日) 01:46:34.86 .net] すいません。>>161 さまのおっしゃる通りです。 $ for i in $(seq 30); do echo $i$(case $i in *1?) echo th;; *1) echo st;; *2) echo nd;; *3) echo rd;; *) echo th;; esac); done これでどうでしょうか
168 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/03(日) 16:20:05.98 .net] クソ
169 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/03(日) 16:34:12.72 .net] いんでね
170 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/03(日) 17:38:56.64 .net] まず添削してくださいってどうしてほしいんだ ちゃんと動いてんならそれはもう正解だと思うんだが
171 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/03(日) 21:36:16.19 .net] 実際間違ってたんだし、いいじゃん
172 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04
] [ここ壊れてます]
173 名前:(月) 20:30:59.60 .net mailto: >>167 ちゃんと動いているかどうか判断できないから聞いてるんでは [] [ここ壊れてます]
174 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 20:52:08.98 .net] エラるのはbashのバージョンのせいかな?3.2.57ではエラる/4.3.48では問題ない だとしたらPOSIX utils云々はちょっと違うんじゃねと思わなくもない。POSIX utils云々って書いている意図がよくわからんけど
175 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 21:51:17.95 .net] case文をこうしたら3.2.57で動いた case $i in (*1?) echo th;; (*1) echo st;; (*2) echo nd;; (*3) echo rd;; (*) echo th;; esac
176 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 22:16:01.07 .net] おおっ。ぱーふぇくつ(?)やねっ! ( が必要??なんなんなん??と謎だけど
177 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 22:26:45.14 .net] $() 内では、case の ) を case の ) と認識してないで、$( の終わりと見てまうってのか。それで普通は使わない ( をか。いちおう ( はつけてもいいのね。つけてもつけなくてもいい存在みたいだけど
178 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 22:42:04.72 .net] え…… >>164 のやつ、GNU bash 4.4.12,zsh 5.3.1,dash全てで動いたんだけど(Debian GNU/Linux)。 もちろん$()判定の不具合を回避したcase ()版でも動いたけれども。
179 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 23:08:17.44 .net] bashの前のバージョン 3.2.57 でのなんですけど
180 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/04(月) 23:49:50.64 .net] あ。>>170 でそう書いてあるな……。すいません。
181 名前:名無しさん@お腹いっぱい。 [2018/06/05(火) 00:18:12.94 .net] sedなどで 1. 「%」以降改行までを削除 2. ただし「%」の直前に「\」があれば削除しない (要するにTeXシステムのコメント除去) をしたいです。また、できればなのですがPOSIXの範疇で行いたいです。 しかし2.を表わす正規表現が分かりません。教えていただけないでしょうか。 sedでsed -e '/%/{}'のようにして{}の内部で「\」が前置されているか判定するのが一番一般的かとは思うのですが それさえ……。 どうかよろしくおねがいします。
182 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 00:27:24.06 .net] sed -e '/^%/d' -e 's/\([^\]\)%.*$/\1/g' でも確かTeXってオプション引数に%含まれてる場合コメントにならないんじゃなかったか? \somecs[hoge=42%]{VAL} ↑こういうの。いや俺の記憶違いかもしれんが
183 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 01:22:58.47 .net] sedのスレもあれば 正規表現のスレもある なんでここで聞く
184 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 01:34:56.97 .net] 使えるからかな
185 名前:名無しさん@お腹いっぱい。 [2018/06/05(火) 15:36:09.34 .net] 以下のCのソースコードをシェルスクリプトに直したいのですが難しくてできない状態です お願いできますでしょうか? Cでは動作確認済みです インデントするとここに貼れなかったので、見にくくなっていてすみません どなたかよろしくお願いします #include <stdio.h> int main(void){ int res, i; printf("2以上の整数をキーボードから入力してください。\n"); scanf("%d", &res); for (i = 2; i <= res; i++) { if (i == res) { printf("%dは素数でした。\n", res); } else if ((res % i) == 0) { printf("%dは素数ではありません。%dで割り切れます。\n", res, i); break; } } return 0; }
186 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:08:24.34 .net] 宿題っぽい
187 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:10:05.52 .net] なんかここ最近大学の宿題か?っていう質問多いな
188 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:10:24.26 .net] 丸被りしててワロタ
189 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:12:56.96 .net] さすがに今回のはな
190 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:18:19.15 .net] 判定方法から見直した方がいいんじゃないの なんか無駄そう
191 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 16:31:28.92 .net] 宿題は自分でやろう
192 名前:181 mailto:sage [2018/06/05(火) 16:41:35.30 .net] その通りっすね スレ汚し失礼しました
193 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:10:33.43 .net] 以下のCのソースコードをシェルスクリプトに直したいのですが × 難しくてできない状態です ○
194 名前:馬鹿だからできないです 勝手に難しい状態にするんじゃねーよ [] [ここ壊れてます]
195 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:13:20.82 .net] 普通に読めば自分にとっては難しいってことなんじゃ 大学生の宿題も困るが読解力の無いバカも困る
196 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:14:42.20 .net] だな
197 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:16:21.87 .net] このスレは馬鹿ばかりいる状態ですwww
198 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:16:51.44 .net] だな
199 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:18:07.86 .net] プライドで自分が馬鹿でわかりませんって言うことができないから それは悪くねぇけどさぁ、難しい状態になっちゃんてんのよー って言いたいからそう書いてるんだろ それぐらい読み取れよ
200 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:19:01.78 .net] だな
201 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:22:56.16 .net] よほど気に障ったか気に入られたらしいwどっちかな?
202 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:37:21.07 .net] だな
203 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 17:53:12.42 .net] んだ
204 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 18:20:42.13 .net] >>194 馬鹿乙 いい加減にしとけ
205 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 18:35:06.81 .net] だな
206 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 18:35:44.97 .net] >>199 あんたよっぽど気に触ったんだねw
207 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 19:00:07.82 .net] >>194 わざわざまた出てくるとかどんだけプライド高いんだよ w
208 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 19:25:49.18 .net] >>202 拗らせるだけだからもう触んな。わかるやつにはわかってるから
209 名前:名無しさん@お腹いっぱい。 [2018/06/05(火) 19:35:30.82 .net] せやな
210 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 20:09:14.02 .net] >>189 は相当に痛い人だなw
211 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 20:28:47.22 .net] Cからawkだとつまらない解になってしまうな。 awk '{for(i=2;i<=$0;i++){ if(i==$0){print $0"は素数でした 。"} else if(($0%i)==0){print $0"は素数ではありません。"i"で割り切れます。";break; }}}' <<< "$(read -p "2以上の整数をキーボードから入力してください。" res ; cat <<< "$res")"
212 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 21:20:01.96 .net] >>205 いい加減にしろ。うざいって言われてるのはお前だってわかってないのか?
213 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 21:49:44.22 .net] だな
214 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/05(火) 22:21:32.15 .net] curl -s "hage.com.json" | jq -r '.main | .detail_list[] | .file_list[] | .date, .file_title, .file_name' これだと、date と file_title とfile_name の内容が表示されるんですが、 detail_listと同じ階層にあるnavi_nameの内容も表示させたい場合はどう書けばいいですか? よろしくお願いします。
215 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 02:39:28.51 .net] >>209 とくにこだわりがないのであれば jq じゃなく parsrj 使えば?
216 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 02:47:20.26 .net] >>207 何言ってんだお前?
217 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 09:02:34.23 .net] aaa=(888 犬 `date +"%Y%m%d"010000 -d last-sunday`) bbb=(777 猫 `date +"%Y%m%d"150000 -d last-Saturday`) ccc=(666 鳥 `date +"%Y%m%d"000000 -d last-friday`) for hoge in "$aaa" "$bbb" "$ccc" do if [ -e ~/${hoge[1]}_${hoge[2]:0:4}_${hoge[2]:4:2}_${hoge[2]:6:2}.mp4 ]; then exit 0 else ffmpeg -i ~/output/${hoge[2]}-${hoge[0]}.aac ~/${hoge[1]}_${hoge[2]:0:4}_${hoge[2]:4:2}_${hoge[2]:6:2}.mp4 fi done こんな感じのスクリプト書いたのですが、配列が展開してくれません。 どうすれば変数に入れた配列が機能するでしょうか アドバイスお願いします。
218 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 09:51:21.96 .net] >>210 jqにこだわりはないが、 parsrjなんて誰も使ってないものは使いたくないなw
219 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 09:51:56.75 .net] >>212 配列はbash専用機能なので使うな
220 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 13:07:10.63 .net] >>189 状態ってなんだよwwwって話だよなあ 頭の悪い人は理解できないみたいだけど
221 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 13:12:22.57 .net] なんだかんだレスに飢えてるよね
222 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 13:23:12.77 .net] やりたいこと想像してベタにやってみたけど printf "%s %s %s\n" ${aaa[@]} ${bbb[@]} ${ccc[@]} | while read hoge0 hoge1 hoge2; do if [ -e ~/${hoge
223 名前:1}_${hoge2:0:4}_${hoge2:4:2}_${hoge2:6:2}.mp4 ]; then exit 0 else ffmpeg -nostdin -i ~/output/${hoge2}-${hoge0}.aac ~/${hoge1}_${hoge2:0:4}_${hoge2:4:2}_${hoge2:6:2}.mp4 fi done ...て、ほぼ配列じゃなくなっちゃったは [] [ここ壊れてます]
224 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 13:55:28.85 .net] >>217 あとは、そのbash依存の文字列の〜文字目をとってくるってのをなくそう っていうかdate使って%Y_%m_%dとかでいいだろと
225 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 14:36:06.61 .net] よくいる偉そうにしたいのが主な目的なのがわいてる感じ
226 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 14:45:44.90 .net] そういう言葉でしか言い返せないのな 悔しかったら技術で勝負しろ
227 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 14:49:07.49 .net] どこに勝負要素があるのか分からない しかし最近汚いコードがばらっと貼り付けられまくるのは同一人物なのか?
228 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 14:51:48.88 .net] 身に覚えがなかったら勝負とか言わないよなあ。てか、勝負ってw なにか偉そうにしたい/マウントとりたいのがありありだな
229 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 14:55:35.99 .net] >>221 違うんじゃね。汚いとか言いだしたらきりがないぞな。言うなら整形して上げたほうが意味あるんじゃね
230 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 15:23:05.47 .net] 年月日を配列でw printf "%s %s %s\n" ${aaa[@]} ${bbb[@]} ${ccc[@]} | while read hoge0 hoge1 hoge2; do fuga=(`echo $hoge2 | sed 's/^\(....\)\(..\)\(..\).*/\1 \2 \3/'`) if [ -e ~/${hoge1}_${fuga[0]}_${fuga[1]}_${fuga[2]}.mp4 ]; then exit 0 else ffmpeg -nostdin -i ~/output/${hoge2}-${hoge0}.aac ~/${hoge1}_${fuga[0]}_${fuga[1]}_${fuga[2]}.mp4 fi done からの〜 printf "%s %s %s\n" ${aaa[@]} ${bbb[@]} ${ccc[@]} | while read hoge0 hoge1 hoge2; do set - `echo ${hoge2} | sed 's/^\(....\)\(..\)\(..\).*/\1 \2 \3/'` if [ -e ~/${hoge1}_$1_$2_$3.mp4 ]; then exit 0 else ffmpeg -nostdin -i ~/output/${hoge2}-${hoge0}.aac ~/${hoge1}_$1_$2_$3.mp4 fi done
231 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 15:51:47.08 .net] 元のソースが汚いと修正も面倒だなとw まず一旦ループと変数をやめる if [ -e ~/犬_2018_06_06.mp4 ]; then exit 0 else ffmpeg -i ~/output/20180603010000-888.aac ~/犬_2018_06_06.mp4 fi if [ -e ~/猫_2018_06_06.mp4 ]; then exit 0 else ffmpeg -i ~/output/20180603150000-777.aac ~/猫_2018_06_06.mp4.mp4 fi if [ -e ~/鳥_2018_06_06.mp4 ]; then exit 0 else ffmpeg -i ~/output/20180603010000-666.aac ~/鳥_2018_06_06.mp4.mp4 fi
232 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 15:57:58.57 .net] つぎに、変数に入れ直す そして書き込もうとしたらNGワードとか言われたから ついでに関数にする infile=~/output/20180603010000-888.aac outfile=~/犬_2018_06_06.mp4 output "$infile" "$outfile" infile=~/output/20180603150000-777.aac outfile=~/猫_2018_06_06.mp4 output "$infile" "$outfile" infile=~/output/20180603010000-666.aac outfile=~/鳥_2018_06_06.mp4 output "$infile" "$outfile" output() { $infile=$1 $outfile=$2 if [ -e "$outfile" ]; then exit 0 else ffmpeg -i "$infile" "$outfile" fi }
233 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:00:15.08 .net] 一旦余計な変数を排除する output ~/output/20180603010000-888.aac ~/犬_2018_06_06.mp4 output ~/output/20180603150000-777.aac ~/猫_2018_06_06.mp4 output ~/output/20180603010000-666.aac ~/鳥_2018_06_06.mp4 output() { [ -e "$2" ] && exit 0 ffmpeg -i "$1" "$2" }
234 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:02:16.64 .net] >元のソースが汚いと修正も面倒だなとw だろ?w そこはスルーでええやん、別に求められているわけでもないんだし まあ、お疲れ様です(嫌味ではない)
235 名前:名無しさん@お腹いっぱい。 mailto:sage [2018/06/06(水) 16:15:15.79 .net] 日付の部分を元に戻す output "$(date +"%Y%m%d010000" -d last-sunday)-888.aac" "犬_$(date +"%Y_%m_%d" -d last-sunday).mp4" output "$(date +"%Y%m%d150000" -d last-saturday)-777.aac" "猫_$(date +"%Y_%m_%d" -d last-saturday).mp4" output "$(date +"%Y%m%d000000" -d last-friday)-666.aac" "鳥_$(date +"%Y_%m_%d" -d last-friday).mp4" output() { [ -e "$HOME/$2" ] && exit 0 ffmpeg -i "$HOME/output/$1" "$HOME/$2" } くだらん文字列結合を省く output "$(date +"%Y%m%d010000-888.aac" -d last-sunday)" "$(date +"犬_%Y_%m_%d.mp4" -d last-sunday)" output "$(date +"%Y%m%d150000-777.aac" -d last-saturday)" "$(date +"猫_%Y_%m_%d.mp4" -d last-saturday)" output "$(date +"%Y%m%d000000-666.aac" -d last-friday)" "$(date +"鳥_%Y_%m_%d.mp4" -d last-friday)" output() { [ -e "$HOME/$2" ] && exit 0 ffmpeg -i "$HOME/output/$1" "$HOME/$2" }