08/01/16 22:16:21 KAlEWwYc
1. 偏りそう
2. bash依存
3.4. 面倒
という問題点があるから,誰かいい方法教えてくれないか?
451:login:Penguin
08/01/16 22:19:14 KAlEWwYc
>449 たしかに用途によって求められる強さが違う気がする.
とりあえずこうしとけ的な汎用的な方法はないんかな.
いちばん手軽な方法が知りたい
452:login:Penguin
08/01/16 22:47:32 HQvmxN1E
>>448
$$はスクリプト内で複数個必要だと使えない罠
dateのmanを見ていたら、
%N nanoseconds (000000000..999999999)
というのがあった。こんな感じ
% echo -n `date +%N`
431218994 % echo -n `date +%N`
857494685 % echo -n `date +%N`
269031777 % echo -n `date +%N`
803351248 % echo -n `date +%N`
195538275 % echo -n `date +%N`
538357509 % echo -n `date +%N`
058776188 %
453:login:Penguin
08/01/16 23:09:59 PJonPFmQ
jotはたぶんBSD系限定だよな。
jot -r 10 1 6
/dev/urandomは10進数テキストで得るのがめんどーだろうか。
dd if=/dev/urandom bs=2 count=1 2>/dev/null | od -vd
左カラムがじゃまだな。 sed 1q |cut -f2 -d' ' とかで削るか。
454:login:Penguin
08/01/16 23:21:36 KAlEWwYc
>452,453
なるほど.date +%Nはいい感じ.
jot便利そうだよ,jot.犬にもこんなの欲しいな.
ありがとう
455:login:Penguin
08/01/16 23:24:18 HQvmxN1E
od -t u1 /dev/urandom | awk '{print $2;exit}'
456:login:Penguin
08/01/16 23:33:28 PJonPFmQ
r=`fortune | md5sum - | sed 's/^¥(........¥).*/¥1/'`
r=`printf %d 0x$r`
ごめんなさいごめんなさい。
457:login:Penguin
08/01/16 23:51:47 puzD1M+G
普通に perl -e 'print int(rand(1000))' じゃダメなの?(perl5前提だけど)
458:login:Penguin
08/01/16 23:55:16 KAlEWwYc
>457 これだけのためにperlやawkを出してきたくないという貧乏心があってwww
459:login:Penguin
08/01/17 01:30:17 xe77Y4ah
時は金なり、というじゃない
460:login:Penguin
08/01/17 01:45:37 hGbWYs9C
つーか、乱数ってこれだけのため、っていうほど簡単なものじゃないと思う。
そういうものが必要な処理はシェルじゃなく、ちゃんとそれなりの言語でプログラムしたほうがいいかも。
461:login:Penguin
08/01/17 09:08:26 MJ2pzO6M
確かに簡単な乱数ならともかく、ちゃんとした乱数が欲しい処理は言語引っ張り出したほうが良いかもね
462:login:Penguin
08/01/17 09:18:44 wcByJn9i
% i=0; while [ $i -lt 1000 ] ; do echo "$i "`date +%N`; i=`expr $i + 1`; done \
| awk '{hist[int($2%10)]++} END{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n
0 9.70%
1 10.70%
2 8.60%
3 11.00%
4 10.40%
5 8.90%
6 11.40%
7 9.70%
8 9.80%
9 9.80%
(´・ω・`)
% i=0; while [ $i -lt 1000 ] ; do echo "$i "`date +%N`; i=`expr $i + 1`; done \
| awk '{hist[int($2%10)]++} END{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n
0 9.20%
1 12.30%
2 8.60%
3 11.00%
4 11.20%
5 9.30%
6 11.40%
7 7.80%
8 11.40%
9 7.80%
(゚д゚)
463:login:Penguin
08/01/17 09:28:02 wcByJn9i
% od -t u1 /dev/urandom \
| awk '{hist[int($2/256.0*10)]++} NR==1000{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n
0 9.80%
1 9.50%
2 10.10%
3 9.80%
4 9.80%
5 9.40%
6 10.20%
7 10.20%
8 10.30%
9 10.90%
(´・ω・`)
% perl -e '$MAX=10;$LOOP=1000000; for (1...$LOOP) {$hist[int(rand()*$MAX)]++}; for (0..$MAX-1) {printf("%2d %4.2f%\n", $_, $hist[$_]/$LOOP*100) }'
0 9.98%
1 9.99%
2 9.99%
3 10.02%
4 10.03%
5 10.02%
6 9.92%
7 10.00%
8 10.00%
9 10.04%
(゚∀゚)
date +%Nは、ばらつきはともかく遅いな...
464:login:Penguin
08/01/17 10:59:36 bFGNQCBf
遅いのは date +%N じゃなくて while のループだと思うよ。
465:login:Penguin
08/01/17 11:37:17 LfhUWWyD
>>450
> 2. bash依存
ksh88由来らしい
URLリンク(www.cs.princeton.edu)
ksh互換を期待できるなら使ってもいいんじゃね
466:login:Penguin
08/01/18 01:58:10 S6Zw/ddB
/usr/games/random -e 100; echo $? は?
467:login:Penguin
08/01/18 07:42:17 YTGcRcKS
>>466
/usr/gamesってそれ何年前のWSのディレクトリ構成だよ...
468:login:Penguin
08/01/18 17:40:50 wVas3OI3
findの検索結果でディレクトリの場合は最後に「/」をつけさせたいのですが、いい方法はあるでしょうか?
469:login:Penguin
08/01/18 17:50:43 YTGcRcKS
find . -exec ls -Fd {} \;
470:login:Penguin
08/01/18 22:33:39 EJvy1m4k
>>468
find (検索ディレクトリ) -type d -printf "%p/\n" -or -print
471:login:Penguin
08/01/18 22:55:09 S6Zw/ddB
>>467
最新のLinuxの(いやほんと。これだけは伝統的理由で残ってるのかな)
472:login:Penguin
08/01/18 23:22:22 6BHP4h96
>471 鳥は?
473:login:Penguin
08/01/19 01:14:55 ZLNpfSkQ
>>472
Debian (sid)。まあ bsdgames とかまんまレガシーなパッケージだけだけどね。
474:login:Penguin
08/01/19 05:58:20 JWtUz7T2
Debian etch にも/usr/games はあるな。
中みたらbannerとfortuneが入ってた。
475:login:Penguin
08/01/19 08:07:34 njld/y5g
シェルスクリプトの本で実用例の多い本ってありませんか?
476:login:Penguin
08/01/19 17:07:33 NuJUp+KH
Fedora4を使っています
/start.txt内の記載が
12
254
3678
4
59
621
78
896
、、、、、、
と法則性の無い桁数の数字が2000行近くあるものを
/end.txtに
12,254,3678,4
59,621,78,896
、、、、
A,B,C,Dと4項目で1行に変換したいと思っています
start.txtから4行抜き出して end.txtに1行にする考え方でいい方法を教えていただけないでしょうか
よろしくお願いいたします
477:login:Penguin
08/01/19 18:46:40 ZLMZWyE0
cat /tmp/test.txt | awk 'NR%4{printf("%s,",$0)} !(NR%4) {print $0} '
余りが出たら最後カンマ付きで出力されちゃうけど
478:login:Penguin
08/01/19 18:55:41 NuJUp+KH
>>477
完璧な物ありがとうございます
今迄sedばかり使っていたのですがawkすごいですね
awkの勉強させていただきます
479:login:Penguin
08/01/19 18:59:10 IrN8xoLt
>>477 あらupしようとしたら同じだったわ。
awk '{printf"%s%s",$0,(NR%4?",":"\n")}' < start.txt
480:login:Penguin
08/01/19 19:02:55 NuJUp+KH
>>479
ありがとうございました
とても参考になります
481:login:Penguin
08/01/19 19:43:02 rxOILVvf
vi start.txt
q94J↓q10000@9
:%s/ /,/g
:w end.txt
482:login:Penguin
08/01/19 19:59:13 58USgOmq
>>473-474
Debianではゲームの実行バイナリは/usr/gamesに置かれるぜ。
最近はポリシーチェッカも警告を出すようになったから、lennyまでには移動完了するんじゃね。
URLリンク(lintian.debian.org)
URLリンク(lintian.debian.org)
483:login:Penguin
08/01/19 21:00:37 ZLNpfSkQ
>>482
なんでだろうね?
FHS誤解してたかと読み直したらそんなことないし。理由がわからん。
484:login:Penguin
08/01/19 21:04:24 ZLNpfSkQ
ごめん上は嘘。Debian Policy には
As described in the FHS, binaries of games should be installed in the directory /usr/games.
This also applies to games that use the X Window System.
Manual pages for games (X and non-X games) should be installed in /usr/share/man/man6.
とか書いてあった。FHSをgrepしたら、正式なセクションはないが、optionalとしてgames作っていいと
書いてあった。
485:login:Penguin
08/01/19 21:14:55 Xt/fDApd
FHSとかグローバリゼーションとか国際化とか
そういうのが全て悪の元凶。
486:login:Penguin
08/01/19 22:06:40 ZLNpfSkQ
FHSは/usr/localと/etcを綺麗にしてくれる。
それだけでも推進されてしかるべき。
487:login:Penguin
08/01/20 02:02:52 dexE1e0m
/usr/gamesはオプションなのに、/usr/local/gamesは必須扱いなところを見れば分かるとおり
ディトリビュータはゲームなんか提供すんな、ということなのだよ。
つまりゲームを提供しているDebianは人々を堕落させる悪のディストリビュータなのだ!
488:login:Penguin
08/01/20 02:23:04 kH+ebKTA
>>487
なにその陰謀史観(w
単に /usr/ 直下はディストリの管轄だし自分で決めろ、
一方で /usr/local/* は空フォルダ切っておく以上は認められないから
代わりとして、せめて誘導できるように切っておけ、ということかと。
FHSで自分的に従来慣習と比較して見慣れないのは/srvだな。
どこのUNIXでの慣習だったんだろう?
489:login:Penguin
08/01/20 02:55:38 M1QHfiRt
つっこみどころは
/usr/games/bin/fortune じゃなくて
/usr/games/fortune ってとこじゃなかったのかー
490:login:Penguin
08/01/20 04:01:16 FZKKsnAp
>>476
sed ':b;1~4,+2{N;s/\n/,/;bb}'
sedも心の片隅にでも置いておいてやってくだされ。
491:login:Penguin
08/01/20 04:20:45 IwRos1VB
>>489
管理者のPATHからゲーム関係を除外するのが目的だろうから
/usr/games/binとサブディレクトリを掘る必要はないんじゃね。
492:login:Penguin
08/01/21 02:31:10 HJiECvMS
>>490
そんな記法初めて見た…
どうなってんの???
493:login:Penguin
08/01/21 02:55:10 QTxOOwHl
アドレス指定がGNU拡張?
494:login:Penguin
08/01/21 11:41:48 JvqHER/W
>>476
paste -d, - - - -
paste も心の片(ry
495:login:Penguin
08/01/21 14:42:32 svPtjQeo
次のようなファイルがあるとします。
$ cat name.txt
name1
name2
name3
name4
name5
$ cat weight.txt
weight1
weight2
weight3
weight4
weight5
このとき、なんとかして
$ ???????????
name1 weight1
name2 weight2
name3 weight3
name4 weight4
name5 weight5
と表示したいのですができません。
最初は
$ cat name.txt weight.txt > data.txt
$ awk '{ if(NR<=5) a[NR]=$0; else b[NR-5]=$0} end{for(i=1;i<=100;i++) printf i,a[i],b[i];}' data.txt
としましたが、空白が表示されるだけでした。
496:login:Penguin
08/01/21 14:51:31 N+zVQlnl
>>495
paste
497:login:Penguin
08/01/21 14:53:35 svPtjQeo
>>496
ありがとうございました。
ぐぐるまでもヘルプ読むまでもなく、
適当にいじっただけでそうなりました。
498:login:Penguin
08/01/22 11:11:17 DOTIpHDE
gawk 'FILENAME != old {i=0;old=FILENAME} {data[i++] = data[i]" "$0;} END{for(j=0; j<i; j++)print data[j]}' name.txt weight.txt
gawk 'FILENAME != old {i=0;old=FILENAME} {data[i++] = data[i]" "$0;} END{for(j=0; j<i; j++)print data[j]}' name.txt weight.txt height.txt
ファイル数に制限はない。あと出力される行数は、最後のファイルの行数によって決まってしまうがな。
499:login:Penguin
08/01/25 13:18:49 u9KTnE0i
ランダムに壁紙を表示するスクリプト作ってみました
一応予想通りに動いてるようですが問題点や改善点があったら叩いてくだしあ
#!/bin/sh
EXT='.jpeg$|.jpg$|.png$'
LIST=`ls $1 | grep -Ei $EXT`
if [ "$LIST" = '' ] ; then\
echo "No files found in $1."
exit
fi
NUM=`echo $LIST | wc -w`
N=`expr $RANDOM % $NUM + 1`
TARGET=`echo $LIST | cut -d ' ' -f $N`
#echo "$1/$TARGET"
bsetbg $1/$TARGET
500:login:Penguin
08/01/25 15:41:59 5ugSsaO2
>>499
そのままだと画像ファイル名やパスに空白があると動かないけど、いいのか?
501:login:Penguin
08/01/25 17:04:10 HizVC3Pf
#!/usr/bin/python
import sys, os, random
def is_image(filename):
EXT = ('jpeg', 'jpg', 'png')
return any(filename.endswith(ext) for ext in EXT)
if sys.argv[1:]:
dir = sys.argv[1]
else:
dir = os.path.curdir
files = filter(is_image, os.listdir(dir))
if not files:
print "No images found in %s" % dir
sys.exit(1)
target = random.choice(files)
os.system("echo bsetbg '%s'" % os.path.join(dir, target))
# 高級言語って素晴らしいね
502:login:Penguin
08/01/25 17:51:17 u9KTnE0i
>501 ちょwwスレタイwww
修正してみました
#!/bin/sh
EXT='.jpeg$|.jpg$|.png$'
if [ "$1" = '' ] ; then\
DIR=`pwd`
else\
DIR="$1"
fi
LIST=`ls "$DIR" | grep -Ei "$EXT"`
if [ "$LIST" = '' ] ; then\
echo "No files found in $DIR."
exit
fi
NUM=`echo "$LIST" | wc -w`
N=`expr "$RANDOM % $NUM + 1"`
TARGET=`echo "$LIST" | cut -d ' ' -f "$N"`
#echo "$DIR/$TARGET"
bsetbg "$DIR/$TARGET"
503:login:Penguin
08/01/25 18:55:56 u9KTnE0i
>502 事故レス
expr はクオートしちゃまずかった
504:login:Penguin
08/01/26 00:32:05 0LMYrtfF
個人的には NUM= 以降を配列でやらせることが多いので、わりと bash を使う。
#!/bin/bash
DIR=$1
IFS='
'
TARGET=(`find "${DIR:=.}" -maxdepth 1 \( -name '*.[Jj][Pp][Ee][Gg]' -o -name '*.[Jj][Pp][Gg]' -o -name '*.[Pp][Nn][Gg]' \)`)
if [ ${#TARGET[@]} -eq 0 ]; then
echo "No files found in ${DIR:=.}"
exit -1
fi
#echo ${TARGET[`expr ${RANDOM} % ${#TARGET[@]}`]}
bsetbg ${TARGET[`expr ${RANDOM} % ${#TARGET[@]}`]}
とか。
505:login:Penguin
08/01/26 00:54:55 a+SvfS+1
>>504
おまいさんの find には -iname は無いのか?
あと、bash なら自前で算術計算できるよ
bsetbg "${TARGET[RANDOM % ${#TARGET[@]}]}"
506:login:Penguin
08/01/26 01:31:49 Gp61cAWI
>おまいさんの find には -iname は無いのか?
あ、これは知らんかった。有り難う。
>あと、bash なら自前で算術計算できるよ
こちらは知っていたけど、元ネタに合わせんと。
507:login:Penguin
08/01/26 11:11:47 NixStw3D
#!/bin/sh
filesize=('du -h ~/file.tmp')
$loglen > ~/filesize.txt
という感じでfile.tmpのファイルサイズを出力したいのですが
出力結果に不要な部分があります。
欲しい部分だけ切り取るには、どうすればいいでしょうか?
よろしくお願いします。
100k /home/user/file.tmp
~~~~~ ~~~~~~~~~~~~~~~~~~~~
↑ ↑
欲しい 要らない部分
508:login:Penguin
08/01/26 11:20:53 NixStw3D
#!/bin/sh
filesize=('du -h ~/file.tmp')
$filesize > ~/filesize.txt
間違えてしまいました。こんな感じです。
grepで抽出するオプションの書き方も思い付かず
スクリプトで処理するには・・・?と、行き詰まってます。
509:login:Penguin
08/01/26 11:34:50 opXPKDAo
>>508
cut (coreutils)
510:login:Penguin
08/01/26 11:48:51 NixStw3D
>>509
ヒントありがとうございます。
使い方を調べてみます。
511:login:Penguin
08/01/26 12:47:23 NixStw3D
>>509
もう少しヒントをください。
cat と coreutils のどちらかを使うや
cat か coreutilsのどちらかを使うかや
レスの意図を示していただけるとありがたいです。
シェルスクリプト歴数時間で理解が及ばなく申し訳ないです。
512:login:Penguin
08/01/26 12:52:39 K0Rp0izE
>511 ちょっとでもぐぐってみたのかと.
あと猫じゃなくて切るほうな.
513:login:Penguin
08/01/26 13:12:20 NixStw3D
>>512
調べてみたのですが、広範囲になってきて混乱してきました。
今のところ
cat -Tというオプションと、rtというコマンドを発見して
コンソール上で
du -h /home/user/file.tmp|cat -T|tr "^I/home/user/file.tmp" " "
とすると、ファイル数だけ表示されるようになったので
うまい方法でもないような気もしつつに
#!/bin/sh
filesize=('du -h /home/user/file.tmp|cat -T|tr "^I/home/user/file.tmp" " "')
$filesize > ~/filesize.txt
としてみたのですが
$./filesize.sh
↓うまく実行できずに困っています。
du: invalid option -- T
du: invalid option -- |
du: invalid option -- t
du: invalid option -- r
詳しくは `du --help' を実行して下さい.
514:login:Penguin
08/01/26 13:15:18 K0Rp0izE
>513 catじゃなくてcut.たぶんこれ一発でやりたいことはできると思うから調べてみな.
515:login:Penguin
08/01/26 13:22:31 NixStw3D
>>512,514
ありがとうございます。
素で間違えていました。
調べてみます。
516:login:Penguin
08/01/26 13:24:02 ShBosd97
stat -c %s
ではだめなのか
517:login:Penguin
08/01/26 13:43:18 NixStw3D
コンソールで
$ du -h /home/user/file.tmp|cat -T|cut -d ^ -f 1
としたらうまくファイルサイズだけ切り出せたので
#!/bin/sh
filesize=('du -h /home/user/file.tmp|cat -T|cut -d ^ -f 1')
$filesize > ~/filesize.txt
と、してみたのですが
なにか基本的な構文がおかしいのでしょうか?
バックスラッシュやシングル、ダブルクォーテーションを試してみましたが回避できません。
↓
du: invalid option -- T
du: invalid option -- |
du: invalid option -- u
du: invalid option -- t
du: invalid option -- d
du: invalid option -- f
詳しくは `du --help' を実行して下さい.
>>516
ヒントありがとうございます。
調べてみます。
518:login:Penguin
08/01/26 14:22:43 /buRKO/4
>>517
これでいいだろ。
du -h /home/user/file.tmp | awk '{print $1}' > ~/filesize.txt
519:login:Penguin
08/01/26 16:30:30 NixStw3D
>>518
調べたらawkは強力で、いろいろ使えそうです。
出力も当初の予定通りで完璧でした。
ありがとうございます。
結果を変数に代入出来なくなりましたが、構文を参考に>>517を直したら同様の出力結果で動きました。
#!/bin/sh
du -h /home/user/file.tmp | cat -T | cut -d ^ -f 1 > ~/filesize.txt
>>516
>>518さんを参考に手を入れたらキロバイト表示もできました。
ありがとうございます。
ただ、数字の後ろに「k」を入れる方法が判りませんでしたが。
#!/bin/sh
stat -c %s /home/user/file.tmp | awk '{printf "%s" ,$1/1024}' > ~/filesize.txt
520:login:Penguin
08/01/26 16:43:00 /buRKO/4
>>519
stat -c %s /home/user/file.tmp | awk '{printf "%sk" ,$1}' > ~/filesize.txt
521:login:Penguin
08/01/26 23:58:52 NixStw3D
>>520
応用ありがとうございます!
感謝。
522:login:Penguin
08/01/29 13:18:07 8n8HPqGB
columnコマンドがない環境でインデント合わせをしたいのですが、
何か良い方法はあるでしょうか?
523:login:Penguin
08/01/29 15:57:53 8n8HPqGB
lsコマンドで、ファイルのatimeやctimeを取得する方法はあるでしょうか。
HP環境なので、Linuxのstatコマンドがなくて途方にくれています。
524:login:Penguin
08/01/29 16:05:29 qGMFgswu
>>523
Linux の話じゃないなら板違い。
525:login:Penguin
08/01/29 16:33:43 yAbAmnAs
ファイルから目的の行を削除して上書きしたいとき,
sed -e 2d file >tempfile
mv tempfile file
のようにすればできるんですが,テンポラリファイルを使わない方法はありますか?
526:login:Penguin
08/01/29 16:37:12 qGMFgswu
>>525
GNU sed なら -i で。
527:login:Penguin
08/01/29 21:52:45 6iHka9Si
リダイレクトとサブシェルを駆使してうまいことinplace editをやる技が
あったはずなんだがどうやってぐぐればいいかわからん。
528:login:Penguin
08/01/29 23:11:45 k/ZizWnP
つ named pipe
529:login:Penguin
08/01/30 00:25:54 /azTEfDv
こんな感じのやつか?
$ echo hoge > hoge
$ (rm hoge; (echo fuga; cat) > hoge) < hoge
要はサブシェルに開かせておけば中で上書きしても内容は
デスクリプタから参照できるからそれでin-place処理できるって奴だな。
上は手抜きだけど、どっかのFAQにデスクリプタ付け替えまくりの例題が
載ってたのだけ覚えてる。csh-whynot文書あたりかも?
530:login:Penguin
08/01/30 00:35:03 KwdpVGiV
おおう、そんなかんじだったかも。thx
531:login:Penguin
08/01/30 20:21:01 6DxEwSig
すいません
ちょっと今シェルの作り方で困っているのですが
やりたいことは
一つのフォルダに入っているファイルを、ファイル名によって3つのフォルダに振り分けたいのです。
その際に、どのファイルをどのフォルダに移動するのかはシェルの中に記述するのではなく、
ファイル名の一覧が書いてあるtxtファイルを一行ずつ読んで振り分けたいのです。
ですが、作り方が今いちわかりません。
例えばA,B,Cと分かれていたら
1、Aのフォルダに振り分けるファイル名が書かれたtxtファイルを読む
2、同じファイル名がヒットしたらAに送る
3、次にBのフォルダに振り分けるファイル名が書かれたtxtファイルを読む
4、同じファイル名がヒットしたらBに送る
ファイル名が書かれたtxtファイルはA用B用C用の3種類用意します。
どうやって作ればいいのでしょうか?
532:login:Penguin
08/01/30 20:36:32 CiuX3/ZK
シェルの作り方なんぞ知るかい。
533:login:Penguin
08/01/30 20:38:30 0RlCwXSW
宿題は自分でやれ。
534:login:Penguin
08/01/30 21:41:32 wmsZ0JX8
>531
testコマンドでググレカス
ファイルの読み込み方すらわかんねーなら本一冊買って出直して来い
535:login:Penguin
08/01/30 21:48:11 6DxEwSig
うわー
冷たい
しかも叩く時だけは一気にレスがつくんだね
>>532
>>533
わからないなら無理にレスしなくていいです
536:login:Penguin
08/01/30 22:48:33 5hT959VT
さいきんの、このバカの質問な感じのには
>>わからないなら無理にレスしなくていいです
に類する文言が書き込まれる率が高いな、て思えるんだが、これは
1. この手のバカは結局バカだから、おなじようにしか考えられない
2. 実は同じヤツが何度も釣りに励んでいる
のどちらか、ということだろうか?
537:login:Penguin
08/01/30 22:54:16 KwdpVGiV
シェルを作るのは結構高度な作業だからな。
538:login:Penguin
08/01/30 22:59:49 v0ETiHGx
>>536
真・教えて君養成マニュアルとかがどっかにあるんじゃないか?w
539:login:Penguin
08/01/30 23:01:22 sxNLHjSv
>537 最近はGUIの環境もシェルと呼んだりするらしいしね.
ところで,シェルスクリプトをシェルと略す感覚が信じられない.せめてスクリプトのほうを残すべきじゃないのか,意味的に…
540:login:Penguin
08/01/30 23:05:38 j0KqLeiL
教えてクン養成マニュアル
URLリンク(www.redout.net)
541:login:Penguin
08/01/30 23:39:48 KwdpVGiV
>>539
GUIのシェルってのはそう最近でもないと思う。
DOSSHELLとか、X68kのVS.Xとかあったじゃないか。
542:login:Penguin
08/01/31 00:54:52 5zXcU2rl
>>531
うわーきもい。シェルを作るという表現はおかしい
シェルの作り方って、VBの作り方、Javaの作り方
聞いているのと同じ。それをKY言うのは異常。
for文とifを組み合わせれてループさせれば。
543:login:Penguin
08/01/31 05:38:28 sRx07lee
>>535
>わからないなら無理にレスしなくていいです。
たぶんここの人は9割以上わかっていると思う。
544:login:Penguin
08/01/31 05:47:16 sRx07lee
やる気がおきない。
態度の豹変に腹が立つ。
mv -i `neko a.list` a
mv -i `neko b.list` b
mv -i `neko c.list` c
545:login:Penguin
08/01/31 13:37:31 zeMbksrC
>>544
単純にnukoするよりもls -1 | grep -f a.list
とかしてより分けた方が良くないか?
546:login:Penguin
08/01/31 19:50:10 /M27f8ta
for 変数名 in 10 20 30
do
echo $変数名
done
この構文の変数名ってなんでもいいんですか?
あとこれを実行すると
10
20
30
になりますよね?
547:login:Penguin
08/01/31 20:53:32 p8W84r95
>>546
変数名に使える文字は英字と数字、アンダースコアのみな。
548:login:Penguin
08/01/31 21:07:34 Ih8EaxE5
すると、うちのbashはおかしい。。。
$ for 9_var in 10 20 30; do echo $9_var; done
bash: `9_var': not a valid identifier
549:login:Penguin
08/01/31 21:49:51 g7asi3X7
もしかして>>351 == >>548なんか?
こんなところで釣りなんかすんなよ...
もし釣りじゃなくってバカなんだったら、せめてmanするとかググるセンセに聞くとか、な?
550:548
08/01/31 22:00:40 m8vTasa1
その話題では>>354だが、なぜ351と?
551:login:Penguin
08/01/31 23:25:56 g7asi3X7
>>550
う゛、勘違いとかtypoとか。いかんな、落ち着かんと。
でもってマヂレスしとくと、変数の1文字目は数字じゃダメな。
552:login:Penguin
08/02/01 20:50:34 aG/PrNJ9
kakikomi.txtというテキストファイルがあったとします。
STRING1 を含んでいて、かつ STRING2も含んでいる行だけを
印字しようとおもうのですが、
grep STRING1 kakikomi.txt| grep STRING2
くらいしか思いつきません。二度手間な気がします。
もう少しいい方法ありませんか?
553:login:Penguin
08/02/01 20:57:02 IKSH1LNN
>552 -e
554:login:Penguin
08/02/01 21:42:25 KLEwAeBF
>>552
それ前スレ(UNIX板のほうだったかも試練)で話題になったな
「STRING1とSTRING2を『順不同で』含む行をイッパツで引っ掛けようとしたら
egrep '(STRING1.+STRING2)|(STRING2.+STRING1)'
となってしまう。2個ならまだいいが、3個、4個...と増えていくと正規表現がキモいことになってしまう。
順不同という条件なら、>>552のやり方が一番シンプル
555:login:Penguin
08/02/01 22:20:29 9CGaNXUy
awk '/STRING1/&&/STRING2/' kakikomi.txt
とか。
556:login:Penguin
08/02/01 23:10:27 aG/PrNJ9
>>554,555
ありがとうございました。
最近暇なので本でいろいろ勉強してみます。
557:login:Penguin
08/02/02 02:58:37 jQtmOvcu
例えばここに置いてある松金洋子のデスクトップ用壁紙画像をターゲットとする。
URLリンク(www.sexydesktop.co.uk)
ここには全部で4ページ分48種類の松金洋子の画像がある。
## このサイトの画像はすべてデスクトップ用の壁紙を目的としているので、
## 一つの画像に関して数種類の解像度・縦横比の画像が用意されており、
## アクセスしてきた人の使っているディスプレイ解像度を検出しては、
## 最適な解像度のものを優先的にプッシュするようになっている。
## また、画像ファイルの命名ルールは非常に単純かつ形式的で、
## たとえば例に挙げた松金洋子の画像の場合、
## まず画像の名前を表す youko1 から youko48 までの48種類の画像が用意されている。
## さらにそれぞれの解像度を表す 1280x800 や 800x600 の文字列が続き、
## 最後に拡張子 .jpg が付けられている。
## 注意する点があるとすると、例えば youko48 に対して youko01 だとか、
## 1280x1024 に対して 0800x0600 といった「桁数合わせ」が一切行われていないということ。
558:557
08/02/02 02:59:35 jQtmOvcu
ここから先が質問。やりたいことは、
1). サイトがプッシュしてくるこちらのディスプレイ解像度に関係なく、
すべての画像について、解像度のより大きいバージョンを、
番号の一番若いものから古いものまで全種類取って来たい。
2). その際、取って来た画像のファイル名を修正して、
youko48 に対しては youko01 、1280x1024 に対して 0800x0600 などの「桁数合わせ」をしたい。
3). さらに、ファイル名の中の画像名を表す文字列と、解像度を表す文字列とを _ で結ぶようにしたい。
具体的には、youko11600x1200.jpg と名付けられた youko1 という画像の 1600x1200 版のファイル名を、youko01_1600x1200.jpg としたい。同様に、youko481280x1024.jpg と名付けられた youko48 という画像の
1280x1024 版のファイル名を youko48_1280x1024.jpg としたい。
以上をまとめると、参考例の松金洋子の画像で言えば、
youko11600x1200.jpg から youko481280x1024.jpg までの画像を、
youko01_1600x1200.jpg から youko48_1280x1024.jpg として保存したい。
これを実現するスクリプトをどう書けばいいでしょうか?
なお、好みのタレントの画像が何種類用意されているか(松金洋子の場合は48種類)については、
ダウンロードを開始する前に手作業で調べることとします。
559:login:Penguin
08/02/02 03:11:26 BYWZpRq/
>>557-558
まずお前が考えて出来たスクリプトをうpしろ
話はそれからだ
560:557-558
08/02/02 03:17:30 jQtmOvcu
んー、俺はスクリプトに無知だから、一から十まで全部取って来て、
後で手作業で仕分けする、みたいな超バカなことしかできんのです。
だからエロい人に教えてほしいんです。。
ダメならヒントだけでもいいので下さい。
561:login:Penguin
08/02/02 03:19:54 BYWZpRq/
>>557-558
ほらよ
っ google.co.jp
562:login:Penguin
08/02/02 07:40:21 QLk1rUEb
地道にループ回すしかないのでは
たぶんリネーム関連はperlか何か使ったほうがラクじゃね?
563:login:Penguin
08/02/02 08:38:47 VQl51rL6
2).3). youko0123456789x0123456789.jpg というファイル名はどのように整形すれば?
564:login:Penguin
08/02/02 10:16:29 2Gx0/Giv
$cat test.txt
aaaaaaaaaaaaaaaaaaaaaaaaaa
+bbbbbbbbbb
cccccccccccccccccccccccc
+ddddddddddddddd
長い行は先頭に+をつけて折り返しているという内容のファイルを
$cat test.txt
aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb
cccccccccccccccccccccccc ddddddddddddddd
というように+の折り返しを前の行の後ろに空白付で結合させるにはどうすればいいでしょう?
565:login:Penguin
08/02/02 10:19:50 QLk1rUEb
cat test.txt | tr '\n+' ' 'とかどう?
566:login:Penguin
08/02/02 10:34:51 2Gx0/Giv
>>565
実行したら
$cat test.txt
aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb cccccccccccccccccccccccc ddddddddddddddd
みたいになりましたが
$cat test.txt
aaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb
cccccccccccccccccccccccc ddddddddddddddd
これが出力としてほしいです。
\nと+が別で判断されているのでしょうか・・・
567:login:Penguin
08/02/02 10:37:11 QLk1rUEb
間違った.cat test.txt | tr '\n\+' ' 'で.
568:login:Penguin
08/02/02 10:39:50 QLk1rUEb
ごめん,俺嘘ばっかり言ってるから気にしないでorz
569:login:Penguin
08/02/02 10:41:24 2Gx0/Giv
>.567
同じ結果でしたw
レスありがとう!
570:557-558
08/02/02 10:50:34 jQtmOvcu
>>563
どうもです。
えー、そういう名前のファイルは存在しないので考えてもみませんでした。
>>562
もし $name$no1024x768$suffix がある時 $name$no1024x0768$suffix にせよ、
みたいなことを延々とやる、ということなんでしょうか?(←無知)
うーん。。。
571:login:Penguin
08/02/02 11:02:51 jHuzpaac
>>564
if 先頭が+じゃない then
echo ""
else
echo -n " "
fi
echo -n 行
572:login:Penguin
08/02/02 12:30:06 A3vIBKBi
>>564
sed 'N;s/\n+/ /;t;P;D'
573:login:Penguin
08/02/02 14:09:27 2Gx0/Giv
>>572
ありがとうございます!!
574:login:Penguin
08/02/05 19:10:25 E60rvXpx
/tmpにあるディレクトリをリストし
そこからディレクトリ名だけを切り取りたいと考えています。
/tmpには a b c というディレクトリがあるとして
$ find /tmp -type d -maxdepth 1 -mindepth 1 | xargs awk -F/ '{print $NF}'
を実行すると a だけが出力されてしまいます。
望んでいる出力は a b c なのでうまく出力されるようにしたいです。
findのみを実行すると
/tmp/a
/tmp/b
/tmp/c
と出力されることは確認しました。
申し訳ないのですが良い方法をご教授ください。
575:login:Penguin
08/02/05 19:18:42 DHgW4Gk4
find /tmp -maxdepth 1 -mindepth 1 -type d | awk -F/ '{print $NF}'
find /tmp -maxdepth 1 -mindepth 1 -type d | sed -e 's/.*\///'
find /tmp -maxdepth 1 -mindepth 1 -type d -exec basename {} \;
576:574
08/02/05 19:21:21 E60rvXpx
>>574で実行したコマンドは
$ find /tmp -type d -maxdepth 1 -mindepth 1 | xargs echo | awk -F/ '{print $NF}'
の間違いでした。
よろしくおねがいします。
577:574
08/02/05 19:22:58 E60rvXpx
>>575
望みどおりの出力を得ることができました!
早い回答感謝します。
ありがとうございます。
578:login:Penguin
08/02/06 21:11:41 Qs2nEtFk
すみません、次の表現ってどういう意味なんでしょうか
($Fはlsの結果が入る)
if expr "$F" : '[[:alunum:]_-]\+$' > /dev/null 2>&1; then ...
特に : '[[:alunum]_-]\+$'の箇所が分かりません
自分で調べて分かったのは
[:alunum:]が数値を表すPOSIX準拠の文字クラスであること
:はヌルコマンド
[]が正規表現とすると[[:alnum:]_-]\+$は以下のいずれかという意味でしょうか
数値+$
_+$
-+$
だとしても前半の:とのつながりもよく分からないです..
579:login:Penguin
08/02/06 21:39:32 2Q3KS/FB
そのコロンはexpr の引数であって、パターンマッチを行わせるもの。
ヌルコマンドではない。
[[:alnum]]_-]¥+$ は、
「英数もしくは _ もしくは -」([[:alnum]]_-])の繰り返し(¥+)で末尾になる($)パターン。
つまり$Fが↑のパターンにマッチするかで判断するif文だな。
出力を/dev/nullに捨てている理由は、exprの動作を調べればわかる。
580:login:Penguin
08/02/06 22:12:35 Qs2nEtFk
>>579 ありがとうございます。やっと理解できました!
exprについては、nullまたは0を返した際に0を返すという仕様のため
/dev/nullに出力していることはすぐ分かったんですが
「:」もexprの構文だったんですね
ずっとシェルのパターンマッチの構文として「:」を調べていたため
ハマってました,thx!
581:login:Penguin
08/02/07 17:29:04 SojUAx7O
リダイレクトで先頭5行目から行末から5行目前までを出力したいのですが、
??? | head -n xx | tail -n xx 以外に良い方法はあるでしょうか
582:login:Penguin
08/02/07 18:31:29 K+RTjMO0
なにをしたいのか、君の示した例は本当に目的を満足してるのか、
もういちど確認した方がよいと思われ
583:login:Penguin
08/02/08 08:15:13 D8JF1iVI
では、headとtailは使わずに。
sed -n '5,$p' file.txt | tac | sed -n '5,$p' | tac
…意義が見出せない。。。
584:581
08/02/08 15:35:34 aAYt8gpF
>>583
sedは習ってないので提出できないんですよ
他にないですか?
585:login:Penguin
08/02/08 15:38:14 Yg3sGZTq
>>584
白紙で出せば...
586:login:Penguin
08/02/08 16:08:13 z5e2UbEF
{ read a;read a;read a;read a;tac; } | { read a;read a;read a;read a;tac; }
587:login:Penguin
08/02/08 16:57:33 rygBoGE6
習っていないと使えないって、そんな小学校じゃあるまいし
588:login:Penguin
08/02/08 19:53:27 8gRlFmfx
>sedは習wwwwってwwないのwwwで提出でwwきないんですよww
>他になwwwwいですか?www
のように、wを適当にまぶすスクリプトを誰か考えてくれ。
589:login:Penguin
08/02/08 21:34:44 Z8wDJkcZ
>>588
こんなwwのを作っwwwwてみたんwwだがww
どうだろうかwww
とりあえずwwwwちゃんwwと動いてるよwwうだがwwww
どんな例外wwがあるwwかわからんwww
#!/bin/sh
CHAR='w'
insertw() {
i=0
w=`expr $RANDOM % 3 + 2`
while [ $i -lt $w ]; do
i=`expr $i + 1`
echo -n $CHAR
done
}
while read LINE ;do
while [ "$LINE" ]; do
r=`expr $RANDOM % 6 + 2`
echo -n `echo $LINE | cut -c -${r}`
insertw
r=`expr $r + 1`
LINE=`echo $LINE | cut -c ${r}-`
done
echo ""
done
590:589
08/02/08 21:45:59 Z8wDJkcZ
初心wwww者でサーセンww
$RANDwwwwOM使wwってるのwwwで本wwww当のshではww動かなwwwいはずだけど,wwwここはwwLinux板wwwってことwwwで許wwwwしてもらえるwwよね?
591:login:Penguin
08/02/09 21:05:58 sA/Tx79N
あの~、正規表現についてお聞きしたいのですが
[a-z]で小文字のアルファベット全てにマッチですよね。
ならば
[あ-ん]でひらがな全てにマッチしますか?
592:login:Penguin
08/02/09 21:44:35 y7ESpv1X
yes
593:login:Penguin
08/02/10 00:32:01 HzElnwAK
「ぁ」はマッチしないのでは?
それはそうと、多バイト文字の正規表現って、大抵のアプリケーションで普通に使えるものなのか。
知らなんだ。
594:login:Penguin
08/02/10 01:02:27 bq0IfXwT
質問です。ファイルの対象部分に別のファイルを挿入するコマンドってありますか?
% cat file1
aaa%sbbbccc
% cat file2
ZZZ
% hoge %s file2 < file1
aaaZZZbbbccc
のような動作を期待しています。
挿入するファイルは少し長めなのでsedで置換ではできない気がしています。
awkあたりでfile1を%sが出るまで出力 -> file2を出力 -> file1の%s以降を出力
という方法を考えていますが、もし専門のコマンドがあれば教えてください。
595:594
08/02/10 01:12:39 bq0IfXwT
誤爆先でm4というのを教えてもらいました。
一旦使ってみます
596:login:Penguin
08/02/10 01:14:06 AyxHcvsn
そういうのはエディタで
597:login:Penguin
08/02/10 01:52:24 EflaE009
>>595
おまえFedoraすれにいなかったか?
598:login:Penguin
08/02/10 06:29:30 7q9QRaK3
>>594
printf "`cat file1`\n" `cat file2`
599:login:Penguin
08/02/11 23:47:20 wSzjm7y4
>>593
grep でやってみたらマッチしやがったよ。
600:login:Penguin
08/02/12 02:36:00 NhGbxXsu
文字列として検索できるということと、
全角文字も一文字として扱える、というのとでは意味がぜんぜん違う。
601:login:Penguin
08/02/13 03:57:10 Z8x6psMH
[あ-ん]と[\xe4\x1c-\xe4\x5f]ではまるで別物だしな(コードは適当)
602:login:Penguin
08/02/13 23:44:52 3LjmFUst
#スレ違いだが。
MS-Windowsとの可搬性に最も富むスクリプトは何ですか?
ただし、cygwin環境とperlは除外して。
603:login:Penguin
08/02/13 23:58:15 jHUDsaVW
>>602
javascriptに一票
604:login:Penguin
08/02/14 00:56:22 axFZQkw/
>>602
awk,ruby,Python つーかなんでperlダメなの?
たしかにWinのperlめんどいけどね。
605:login:Penguin
08/02/14 20:13:50 oi3zsBt5
ディレクトリにあるmp3ファイルを1行に3つずつ番号付きで表示して
指定されたファイルを再生するスクリプトを考えてみました。
これだとファイル表示の見た目がいまいちなんですが、カラムを揃えて
表示するようなうまいやり方はありますか?
i=1
for file in *.mp3
do
#3カラムで出力する
x=`expr $i % 3`
if [ $x -eq 0 ]
then echo -e "\033[1;31m$i\033[0m.$file"
else
echo -en "\033[1;31m$i\033[0m.$file "
fi
a[i]=$file
(( i=i+1 ))
done
echo -n "number? >"
read n
if [ -f "${a[n]}" ]
then mplayer "${a[n]}"
else
echo "ファイルがありません"
fi
606:login:Penguin
08/02/14 21:53:57 gBoeKdqH
>>605
#!/bin/sh
FS=`zenity --file-selection`
#このままだと動画なんかもいけるけど、どうしても*.mp3のみにしたい場合は↑行を
#コメントアウトして↓行を有効にする
#FS=`ls *.mp3 | zenity --list --column "Files"`
if [ -z "${FS}" ]
then
exit
fi
mplayer "$FS"
なんつってってねw
607:login:Penguin
08/02/14 22:01:12 vsXOhty3
zenityってなんだろーと思ってググったら……反則すぎ。
608:login:Penguin
08/02/14 22:52:41 fZu2vsjD
>>604
perl.exeの他に色々MS-Windows側に入れなきゃならないものがあるので可搬性に欠けるという理由を考えてみましたが、実は嫌いなだけです。
>>605
3列にこだわらないのなら、bashのselectはどうでしょう。
#!/bin/bash
select name in *.mp3
do
echo "mplayer ${name}"
#break
done
609:login:Penguin
08/02/15 02:46:55 4QUqq28I
>>605
printf で頑張るという選択肢もある。
610:605
08/02/15 19:02:00 BuE7cyMU
>>605の件ですが、レスしてくれた方々、ありがとうございます。
selectを使うのが簡単でイメージどおりなので、それでいきたいと思います。
611:login:Penguin
08/02/16 14:41:12 rUKDlild
久しぶりに来たけど相変わらず
キモいね
612:login:Penguin
08/02/16 14:52:30 TWToK0Vy
シェルに閉じこもってるスレですから
613:login:Penguin
08/02/16 15:09:40 hFdiJNir
ちょっとは環境変数も気にしろよ
614:login:Penguin
08/02/16 15:14:02 TWToK0Vy
export KIMOI=false
615:login:Penguin
08/02/16 15:25:59 hFdiJNir
$ export KIMOI=false
> if [ $KIMOI ]; then
> echo kimoi
> else kimokunai
> fi
kimoi
となります.助けてください><
616:login:Penguin
08/02/16 16:57:40 TCXFbGKj
釣られてやるが
if $KIMOI; then
617:login:Penguin
08/02/16 19:13:59 TWToK0Vy
いやいや、キモイとかキモクナイを超越することこそが答なのだよ。
export KIMOI=
が正解なのだ。
618:login:Penguin
08/02/17 01:08:38 iw9ufgAV
>>615-616
なぜそうなるか素人の私にも解説してくだされぇ~
619:login:Penguin
08/02/17 01:11:52 slw092IT
>>616 素で知らなかった.ありがと!
620:login:Penguin
08/02/17 01:27:34 PyTcVmai
/usr/bin/[≒/usr/bin/test
621:login:Penguin
08/02/17 03:00:02 tnXxiXa8
>>618
if文やwhile文の条件部に書くのは、実はコマンド。
コマンドの終了コードが0なら条件が成立したとみなされる。
で、true(0を返す)やfalse(1(非0)を返す)というコマンドがあるわけだな。
ちなみに [ もコマンドだ。
622:login:Penguin
08/02/17 09:32:32 OGJD7PPY
みんな釣られ過ぎ…
$KIMOIに"false"という文字列を代入してるだけ。
623:login:Penguin
08/02/17 14:07:35 4A7UiB6D
>>612
俺らはゴーストですか
624:login:Penguin
08/02/17 14:21:15 slw092IT
>>623
ネットは広大だよな
625:login:Penguin
08/02/17 14:29:38 uY7SK9GA
>>623
否、貴腐人間かもw
626:login:Penguin
08/02/17 14:38:41 slw092IT
>>625
元ネタwkrn
627:login:Penguin
08/02/17 14:42:27 uY7SK9GA
>>626 「貴腐老人」でggrks
628:login:Penguin
08/02/17 14:44:26 slw092IT
>>627
tnks
629:login:Penguin
08/02/18 07:12:54 AGIm4SRV
zenity でファイルの選択をさせるのに、最初に任意のフォルダを開くにはなんと書けばいいのか教えて下さい。
630:login:Penguin
08/02/18 11:55:16 VgIMGwkB
カレントディレクトリを開くみたいだから、サブシェルを使ってこんな感じでどうかな
(cd /; zenity --file-selection)
631:login:Penguin
08/02/18 13:16:10 AGIm4SRV
>>630
ありがとうございます。
やってみます。
632:login:Penguin
08/02/19 08:50:21 90boQwVS
シェルスクリプトを覚えるとなにが出来るようになるんですか?
633:login:Penguin
08/02/19 09:00:32 7ADZuvq7
>>632
ルーチンワークで楽できる(場合がある)
634:login:Penguin
08/02/19 16:05:41 VrKwqWf/
>>632
作業の自動化や、例えばユーザを100人登録しないといけないとか言う、膨大な作業を
物凄い速度で短時間で終わらせる事が出来るようになるとか。
635:login:Penguin
08/02/19 17:25:49 90boQwVS
>>633>>634
ほほぅ、ありがとうございます。
636:login:Penguin
08/02/19 19:54:38 oWc/fsPo
ほほうって、コンピュータに仕事をさせるという観念のない人なんだろうか。
高級な紙と鉛筆だとしか思ってなさげな人。たまにいるけど……。
637:login:Penguin
08/02/19 19:56:54 7ADZuvq7
魔法の箱だと思ってるよりマシだと思う
638:login:Penguin
08/02/19 23:07:22 VrKwqWf/
コンピュータは ある機能を実現させる為の方法(アルゴリズム)を示してやれば
どんなにそれが重労働だろうが難しい計算をしないといけなかろうが、
忠実に高速かつ正確、大量に実行させる事が出来るから凄いよ・・・。
ただし、その仕事の仕方を教える(アルゴリズムを教える)のがかなり苦労するんだけどな・・・。
639:login:Penguin
08/02/20 03:07:58 eOYCs3Nz
基本的に人間がやってもできることを高速ですることしかできないということを知らない人が多すぎる
640:login:Penguin
08/02/20 03:37:12 Z0UaqwNw
それは、一秒間に3ギガ回も足し算したり、地球の裏側に光の速度で手紙を届けたりなんつーのは
基本的に人間には絶対できない、ということを知らない者は>>639だけだというだけの話かと。
641:login:Penguin
08/02/20 04:33:00 H+YlTABW
君も頭悪いな。
639は高速で、と書いてあるんだから、「速度を問わなければ」人間が…と
読むのが妥当という答にしかならないぞ。
どうせそういう突っ込みするなら空間計算量でやればよかったのに。
642:login:Penguin
08/02/20 07:24:32 kPfB9gdm
理論ばっかりのたまって生産性の無い人ってよくいるよね。
643:login:Penguin
08/02/20 08:22:42 TBsfl6zQ
まとめ。
Q) シェルスクリプトを覚えるとなにが出来るようになるんですか?
A) 理論ばっかりのたまって生産性の無い人ってよくいるよね。
644:login:Penguin
08/02/20 09:09:29 s2YtVBn2
>>632
シェルスクリプトでやりたいと思ったこと。
645:login:Penguin
08/02/20 10:22:00 0BB6Gw/L
俺は…彼女にパイズリして欲しいな…。
乳はAAだけど orz
646:login:Penguin
08/02/20 10:22:28 0BB6Gw/L
>>645
誤爆った。正直スマンかった。
647:login:Penguin
08/02/20 10:47:15 VHJ6cFjQ
>>645
基本的に彼女ができないことなのでシェルスクリプトでもできません。
648:login:Penguin
08/02/20 11:22:35 eOYCs3Nz
>>647
AAでもいいということなので,アスキーアートでおっぱいを表現することならシェルスクリプトで可能です
さらに最近のターミナルエミュレーターはアンチエイリアスがきいてるのでなめらかですよ
649:login:Penguin
08/02/20 11:31:04 Z0UaqwNw
すごいな。>>641は地球の裏側に手紙を届けたりなんてことが「ゆっくりならできる」そうだ。
できるというなら精々一生をかけて歩いて船をこいで手紙を届けにいって、それを証明してほしいものだ。
コンピュータという人間が使うモノが、人間以上の方法(アルゴリズムなどの知性)を知らないのは当然のことだが
最近ではその知性すら、コンピュータを使ったシミュレーション解析などで
得ることが増えているのが現実だったりするわけで。特に知の最先端ほどそうだ。
もはや人類はコンピュータを使わないと新しい知識を得ることすら「できない」状況なんだけどね。
そういう現実が見えない人はやっぱり自分の納得を唯一の判断基準とする文系人かな。
人間は遠くのものが見え、遠くの人と話し、より多くの知識を得、共有できるようになった。
100年前に比べたら、ほんとうに夢の魔法かコミックの世界だ。コンピュータはほんとに魔法の箱みたいじゃないか。
そのセンスは逆にあまり間違っていない気がするけどな。
「高度に進んだ科学技術はもはや魔法と見分けがつかない」アーサー・C・クラーク
650:login:Penguin
08/02/20 12:06:00 eOYCs3Nz
>>649
日本語でおk
電報というものがあるんだが最近のゆとりは知らないのか?
651:login:Penguin
08/02/20 12:14:29 pg37fRgc
ゆとり言いたいだけちゃうんかと
652:login:Penguin
08/02/20 12:23:41 XajlgLxx
ネタはよそでやっとくれよ。
653:login:Penguin
08/02/20 16:28:17 vrkF+BtG
このスレの>>640や>>641の意見が興味深い。面白いな・・・。
>>648
そういうシェルスクリプト作って公開してよwwwwぜひ実行してみたい・・w
654:login:Penguin
08/02/20 19:29:13 7TuVNRao
先日の芥川賞受賞作が>>649の文章に似てる。
句点から次の句点まで地球半周ぐらいあって、だらだらと続く感じが。
URLリンク(sankei.jp.msn.com)
655:login:Penguin
08/02/21 06:19:36 FDbXS9I4
>>649
こういう無駄な長文を書ける才能には素直に感心するよ。
656:login:Penguin
08/02/21 12:33:09 xpu03eg4
時間を持て余してるんだろ?
657:login:Penguin
08/02/21 18:35:15 oj1Q2W6E
ある意味うらやましい知性だ。
658:login:Penguin
08/02/24 10:15:17 RUTtO6AQ
slコマンドってなかった?画面いっぱいにSLを表現
あれはシェルスクリプトではないから違うか・・・。
659:login:Penguin
08/02/24 11:38:47 kyu4Np6c
>>658
つ www.tkl.iis.u-tokyo.ac.jp/~toyoda/
660:login:Penguin
08/02/24 13:02:41 FjGZZj6V
bashです。
cdするたびに一緒にlsもして欲しいんですが、どうやって書いたらいいでしょうか?
aliasだとうまくできないです。
661:login:Penguin
08/02/24 13:04:14 UaS7yo8D
alias cls='cd $1 && ls'
662:login:Penguin
08/02/24 13:21:41 CzUoXlF2
clsといったらCLear Screenだろうに
663:login:Penguin
08/02/24 13:24:30 UaS7yo8D
そうなのか。うちにはそんなコマンドないって言われたもので。
664:login:Penguin
08/02/24 14:04:47 I77Y2jQo
そりゃDOSのコマンドだからな。
665:login:Penguin
08/02/24 14:44:06 FjGZZj6V
>>661
できないみたいです。
カレントディレクトリが切り替わりません。
666:login:Penguin
08/02/24 14:53:32 UaS7yo8D
>>665
うちでは動作確認したんだが・・・なんでだろね。
667:login:Penguin
08/02/24 14:54:08 UaS7yo8D
あ、ほんとだ、切り替わらないねw
668:login:Penguin
08/02/24 15:09:41 I77Y2jQo
PROMPT_COMMAND='if [ "$PWD" != "$PWD2" ]; then ls; PWD2="$PWD"; fi'
669:login:Penguin
08/02/24 15:13:49 uTpa9gVS
>>667
ぢゃあ関数にしちゃうとか。
function cls {
cd $1 && ls
}
670:login:Penguin
08/02/24 15:23:08 UaS7yo8D
cdはシェルの内部コマンドだから親プロセスには反映されないんだねえ。
#!/bin/sh
cd $1
ls
として、foo.shとして、
alias cds='. foo.sh'
かなあ。動作確認はしたw
671:login:Penguin
08/02/24 15:36:14 FjGZZj6V
できればclsじゃなくてcdでやりたいです。
>>669,670 でcdにするとなぜか動かない。
でも参考になりました。
>>668
わかんないです。
672:login:Penguin
08/02/24 15:41:52 FjGZZj6V
#!/bin/sh
'cd' $1
ls
として、foo.shとして、
alias cd='. foo.sh'
でできました。(・∀・)イイ!
ありがとう。
673:login:Penguin
08/02/24 15:42:06 Sa+MU/+b
cd() {
builtin cd $1 && ls
}
674:login:Penguin
08/02/24 15:46:14 I77Y2jQo
( ゚д゚)……
675:login:Penguin
08/02/24 15:47:40 UaS7yo8D
>>673
ビルトインか。やっぱりman読まないとダメだな。
ありがとう。
676:login:Penguin
08/02/24 15:54:18 l3aT8ww/
ほう、すげっ
677:login:Penguin
08/02/24 15:55:21 FjGZZj6V
>>673
それも(・∀・)イイ!
トン
678:login:Penguin
08/02/24 16:08:01 OZdK2Ezs
668は逆にわかりやすいと思うが・・・なぜ分からぬ
679:login:Penguin
08/02/24 16:57:30 M1aIs9jI
>>659
slねぇ・・・Vine 3.2だとmakeしてもエラーが出てmake出来ないんだけど・・・?
apt-get install build-essential は入ってる環境です。
680:login:Penguin
08/02/24 21:43:32 X4+soAGj
>>679
libncurses.soのことか?
681:login:Penguin
08/02/24 22:41:47 WU8Eis2Q
>>673
cd に -P とかオプションつけると機能しなくなるぞ。
cd() { builtin cd "$@" && ls; }
682:login:Penguin
08/02/24 22:44:30 CzUoXlF2
>>673,>>681
それしばらく使ってみるとわかると思うけど、
そのままではナイーブすぎて少し不便だよ。
zshで同じようなことやってるけど、次の点は考慮した方がいいです。
・サブシェルで実行されたときにはlsしない
・行数が多すぎるときは適当な長さで切り、省略した旨を表示
683:login:Penguin
08/02/25 12:48:54 fTf5K0mT
同一内容のファイルを調べるシェルスクリプトなんだけど、過去にここかUNIX板の方で出てたっぽい。
結局やらず仕舞いだったようだし、どうせならシェルスクリプトの勉強がてらやってみようとおもった。
作りたい理想は以下のとおり
・コマンドラインでオプション指定を行い、検索ディレクトリとサブディレクトリへの再帰検索をするかどうか、あとファイルサイズ閾値を指定できる
・走査しているディレクトリにあるファイルパス&ファイルサイズのペアをリストとして吐く
・ファイルサイズ閾値未満で、ファイルサイズが一致したものに対してmd5sumを実行し、両方が同一のハッシュを吐いた場合、表示する。
・ファイルサイズ閾値を設定する理由はmd5sumが時間がかかりそうだから。閾値以上のサイズ一致ファイルはmd5sumすることなく表示する。
684:login:Penguin
08/02/25 12:52:01 fTf5K0mT
ちなみにサブディレクトリの再帰検索をせず、指定したディレクトリの全てのファイルのハッシュ値を比較して表示するだけなら
#!/bin/sh
md5sum $1/* | uniq -D --check-chars=32 | sed 's/^[0-9a-f]* \*//g'
上のだけで済むかな。標準エラーがうざいけど・・・
まずはディレクトリの再帰検索について質問したいところです。
685:login:Penguin
08/02/25 12:55:37 fTf5K0mT
あ、uniqの間にsortを入れてあげるとより親切か
うちの場合はwgetで自動保存したファイルの整理だから、ファイル名が必然的に「DLファイル名+.連番」だから気にならないけど
まったく違うファイル名かつ内容は同一ってときに、ハッシュ値でsortしてあげていた方がいいよね
そう考えたらsedでハッシュ値をわざわざ消す必要もないか・・・
md5sum $1/* | sort | uniq -D --check-chars=32
686:login:Penguin
08/02/25 12:57:54 fTf5K0mT
再帰検索はこの場合、find $1でファイルリストを列挙してからreadで"ls->ファイルサイズ取得"やら"md5sum"やらした方がいいのかな?
687:login:Penguin
08/02/25 13:38:12 fTf5K0mT
不恰好だけどサブディレクトリまで調べて、全てのファイルにmd5sumして表示するのはこんな具合か・・・
#!/bin/sh
TMPFILE="filelist"
touch $TMPFILE
find $1 | while read FILENAME; do
if [ -f "$FILENAME" ]; then
md5sum "$FILENAME" >> $TMPFILE
fi
done
sort < $TMPFILE | uniq -D --check-chars=32
rm $TMPFILE
もうちょっとスマートにならないかなあ・・・ あとユニークなサイズのファイルはmd5sumさせたくないなあ
688:login:Penguin
08/02/25 13:47:58 pu40lUxS
書いてみた。
#!/bin/sh
# finddup.sh -- find . | finddup.sh
while read -r FILENAME
do
[ -f "$FILENAME" ] &&
printf "%14d:%s\n" `stat -c %s "$FILENAME"` "$FILENAME"
done | sort | uniq -D -w14 | cut -b 16- |
xargs md5sum | sort | uniq -D -w32
689:login:Penguin
08/02/25 13:53:38 pu40lUxS
uniq -f のほうが良さそうだね
690:login:Penguin
08/02/25 13:57:12 ATO0A7OZ
>>687
find . -type f -print0 | xargs -0 md5sum | sort | uniq -D -w32
691:login:Penguin
08/02/25 14:17:36 fTf5K0mT
>>688
ありがとう!
あ、ただファイルやディレクトリ名にスペースが入るとmd5sumにしっかり渡せないみたいです
bash on cygwin環境だとWindowsの「コピー (2) ~ hoge.txt」という名前が恨めしい
>>690
出力結果同じだΣすげえ
ちょっとman読んでこよう・・・
692:login:Penguin
08/02/25 14:23:38 pu40lUxS
xargs --delimiter "
" md5sum
でどうかな。ちゃんとテストしなきゃだめだね
まあ改行文字を含むファイルがあるとだめなんだけど、面倒だから他の言語でやらせたほうがいい
693:login:Penguin
08/02/25 14:26:43 ATO0A7OZ
>>692
>>690
694:login:Penguin
08/02/25 14:27:32 pu40lUxS
>>693
全部のファイルにmd5sumかけたら遅いだろ
695:login:Penguin
08/02/25 14:31:42 fTf5K0mT
あ、>>688のxargs md5sumを>>690のようにxargs -0 md5sumにすればOKなのかな
696:login:Penguin
08/02/25 14:38:34 ATO0A7OZ
>>695
んで、printf 側でも \n じゃなく \0 を使うようにする。
697:login:Penguin
08/02/25 14:39:51 pu40lUxS
uniqとcutはどうするよ
698:login:Penguin
08/02/25 14:43:11 fTf5K0mT
printfで囲ってやればイケました(`・ω・´)
#!/bin/sh
# finddup.sh -- ./finddup.sh target-path
find $1 | while read -r FILENAME
do
[ -f "$FILENAME" ] &&
printf "%14d:\"%s\"\n" `stat -c %s "$FILENAME"` "$FILENAME"
done | sort | uniq -D -w14 | cut -b 16- | xargs md5sum | sort | uniq -D -w32
699:login:Penguin
08/02/25 15:21:01 zYqxhFYE
久々にまともな流れだな
700:login:Penguin
08/02/25 16:57:52 fTf5K0mT
ついでに以下のような動きが出来ないか色々試してみています。
どうも二進も三進も行かない
$ ./findup.sh ~/pic/jun.2chan.net/
2件の一致ファイル:8f7c1e2adb45adbfdb4d86adb1b9e894--------------------------
~/jun.2chan.net/b/src/1192805081129.jpg
~/jun.2chan.net/b/src/1192805081141.jpg
-------------------------------------------------------------------------------
~/jun.2chan.net/b/src/1192805081129.jpgを削除しますか?[y/N/a]
~/jun.2chan.net/b/src/1192805081141.jpgを削除しますか?[y/N/a] y
~/jun.2chan.net/b/src/1192805081141.jpgを削除しました。
3件の一致ファイル:6fc4bdc4bc3bb06882bc98d9cbeb60c3--------------------------
~/jun.2chan.net/b/src/1192800164913.jpg
~/jun.2chan.net/b/src/1194189136460.jpg
~/jun.2chan.net/b/src/1194189137115.jpg
-------------------------------------------------------------------------------
~/jun.2chan.net/b/src/1192800164913.jpgを削除しますか?[y/N/a] y
~/jun.2chan.net/b/src/1192800164913.jpgを削除しました。
~/jun.2chan.net/b/src/1194189136460.jpgを削除しますか?[y/N/a] y
~/jun.2chan.net/b/src/1194189136460.jpgを削除しました。
↑同一として列挙されたパスの残りが1になると削除せず次へ
701:login:Penguin
08/02/25 17:00:46 ATO0A7OZ
>>700
そこまで行くとシェルスクリプトには荷が重いんじゃないか?
702:login:Penguin
08/02/25 17:10:48 fTf5K0mT
>>701
以下の点でハードルがあがってるみたいですね
・一致したファイルのグループ分け
・ファイルを一つだけ残して削除した場合、残りの1ファイルは削除しない
列挙した全ファイルに対して、質問→削除というのは簡単にいけそうな感じ。
自分の知識だけで無理と判断して投げるのはアレだと思ったんだけど、やっぱ難しいかなあ
703:login:Penguin
08/02/25 18:09:02 pu40lUxS
#!/bin/bash
# askdelete.sh -- find . | finddup.sh | askdelete.sh
# よくテストされてませんので注意
TMPF=`mktemp /tmp/askdelete.XXXXXX`
trap 'rm $TMPF' 0
CURHASH=
COUNT=0
(cat; echo DUMMYHASH /dev/null) |
while read -r HASH FILENAME; do
if [ "$CURHASH" ] && [ "$CURHASH" != "$HASH" ]; then
echo "------------------------------"
echo "$COUNT 件の一致ファイル:$CURHASH"
tail -n $COUNT $TMPF | cut -b 33-
echo "------------------------------"
tail -n $COUNT $TMPF | while read -r HASH FILENAME; do
[ $COUNT -eq 1 ] && break
echo -n "$FILENAME を削除しますか? [yN] "
while read ANSWER
do
case "$ANSWER" in
[yY]) echo rm "$FILENAME"
COUNT=`expr $COUNT - 1` ;;
esac
done < <(head -1 /dev/tty)
done
COUNT=0
fi
echo $HASH $FILENAME >>$TMPF
CURHASH=$HASH
COUNT=`expr $COUNT + 1`
done
704:login:Penguin
08/02/25 18:12:29 pu40lUxS
done < <(head -1 /dev/tty) とか、絶対おかしいよこれ。
違う言語で書き直したほうがいい。
705:login:Penguin
08/02/25 18:17:46 fTf5K0mT
おおすげええΣ
ちょっとテストしてみます!
706:login:Penguin
08/02/25 19:20:15 pu40lUxS
#!/bin/sh
# askdelete.sh -- find . | finddup.sh | askdelete.sh
TMPF=`mktemp /tmp/askdelete.XXXXXX`
trap 'rm -f $TMPF' 0 1 2 3 15
CURHASH=
COUNT=0
(cat; echo DUMMYHASH /dev/null) |
while read -r HASH FILENAME; do
if [ "$CURHASH" ] && [ "$CURHASH" != "$HASH" ]; then
echo "------------------------------"
echo "$COUNT 件の一致ファイル:$CURHASH"
tail -n $COUNT $TMPF
echo "------------------------------"
tail -n $COUNT $TMPF | while read -r FILENAME; do
[ $COUNT -eq 1 ] && break
echo -n "$FILENAME を削除しますか? [yN] "
while read ANSWER; do
case "$ANSWER" in
[yY]) echo rm "$FILENAME"
COUNT=`expr $COUNT - 1` ;;
esac
break
done < /dev/tty
done
COUNT=0
fi
echo $FILENAME >>$TMPF
CURHASH=$HASH
COUNT=`expr $COUNT + 1`
done
すこしよくなった
参考になる URLリンク(www.nurs.or.jp)
707:login:Penguin
08/02/25 20:58:36 NDOa2UbC
理想的な流れだ。
708:login:Penguin
08/02/26 01:26:57 Knz7qJ2h
>>706
サブシェルをわざわざ使う必要は無いのでは?
--- (cat; echo DUMMYHASH /dev/null) |
+++ { cat; echo DUMMYHASH /dev/null; } |
709:login:Penguin
08/02/26 01:31:17 V2S90oTo
こんなのじゃ駄目?
find . -type f -print | xargs md5sum | sort | while read i
do
set -- $i
test -e .$1 && rm -i $2
touch .$1
done
削除して残りが1つなら消さずに次、ということは最初の1つは
無条件で残して、2つ目以降についてのみ rm -i で削除確認すれば
いいんだよね?
記憶用に .<md5sum> なマーカ作ってるけど、ここは md5sum な
ダミー環境変数の方がいいかも。
710:login:Penguin
08/02/26 08:30:35 V4Ca66lJ
>>709
全ファイルにmd5sumしたら遅くならない?
711:login:Penguin
08/02/26 08:46:21 M2OUW+0j
>>708
パイプを使うと結局はサブシェルが起動されるんだから () のほうがわかりやすいと思うよ
712:login:Penguin
08/02/26 09:53:07 jk2VB7eG
>>710
どうせシェルスクリプトなんて使い捨てなんだし
多少遅くてもいいんじゃない?
実行時間の長さより
思いついたことをちゃちゃっと実行できる手軽さが大事でしょ。
713:login:Penguin
08/02/26 10:56:04 V4Ca66lJ
>>712
もっともな意見だと思うが、肝心なことを棚に上げてるな
シェルスクリプトの本質は処理を効率化するための機能なんだから、
手軽に加えて「より早くスマートに処理」できる方がいいだろうよ
どうせ使い捨てとか言い出したら、いつまで経っても遅くて低機能なスクリプトしか書けないぜ?
まあせっかくいい方向で流れてるから、俺も最適化してみるか。
714:login:Penguin
08/02/26 15:09:02 KrvpwwSS
手作業で30分かかる作業を、わずかワンライン5秒で済ます。
どうよ、この快感、すごいよ、俺!!
ただしスクリブト書きに3時間かかるけどなっ!!、
みたいな・・・・
715:login:Penguin
08/02/26 15:18:25 jk2VB7eG
5分で書いて実行時間3分にできればそれでおkだよな。
その作業を200回繰り返さなきゃいけないなら
3時間かけて書いて5秒に短縮してもいいけど、
そういうのはシェルじゃなくて別な言語を使った方がいいと思う。
716:login:Penguin
08/02/26 16:04:42 V4Ca66lJ
>>714
良いスクリプトを早く書けるスキルを養うといった考えはないのかよw
まぁ価値観が違うなら仕方ないが
>>715
言いたいことは分かるし仕事では俺も同じスタンスだ。モトが取れない作業をするのはアホだと思う。
さらに>>1にあるようにPerlやPythonを使ってもいいと書いてあるように、別にシェルスクリプトに固執はしてないさ。
ただID:fTf5K0mTみたいに質問を丸投げせずに分かってないながらも自分で試してみている奴も居るんだから
「どうせ使い捨て」や「パンがなければケーキを」じゃなくて、しっかりした見本を見せてやろうぜw・・・と思ったんだ。
勝手に限界を作っちゃダメさ・・・!
717:login:Penguin
08/02/26 17:08:11 KrvpwwSS
頑張るところが・・・まっいっか。人それぞれだな。
718:login:Penguin
08/02/26 17:30:17 DxWnmOPN
>>717
茶化すだけならWindowsに切り替えてフリーソフトスレにでも行け。
同一ファイル発見ソフトなんていくつもあるから。
自分で作ろうと思わん奴はウザイだけだ。
719:login:Penguin
08/02/26 22:37:31 ecwr7n8r
Windowsに切り替えて同一ファイル発見ソフトを探すってのもこれまた手間だよな
720:login:Penguin
08/02/27 00:57:44 k4ecn/gW
ああそういう意味か。
Linuxならawkでもperlでもpythonでもgccでも大概入ってんだろうになんで
>Windowsに切り替えてフリーソフトスレにでも行け
なのかマジで理解できなかった。
なるほどな、そういう考え方もあるか。これは考えが及ばなかったな。
まぁうちext3だしなぁ。
721:login:Penguin
08/02/27 02:09:44 5Pe1iZtE
>>711
サブシェル一個より分かりやすさを重視、ってのも分かるが
プロセスを fork するコストはバカにできないぞ。
たった 10 回でもこれだけ差が出る。
$ time for i in 0 1 2 3 4 5 6 7 8 9 ; do { :; } ; done
real 0m0.001s
user 0m0.010s
sys 0m0.000s
$ time for i in 0 1 2 3 4 5 6 7 8 9 ; do ( :; ) ; done
real 0m0.221s
user 0m0.140s
sys 0m0.140s
今回のはともかく、ループの中で無駄なサブシェル起こすと
かなり処理速度に効いてくるから、「より早くスマートに処理」を
目指すなら気にした方がいいと思うよ。
722:login:Penguin
08/02/27 12:04:07 5xPFitgJ
>>721
そうじゃなくて、パイプではサブシェルが起動されるでしょう?
$ { FOO=foo; echo $FOO; } | cat
foo
$ echo $FOO
$
723:login:Penguin
08/02/27 23:04:12 6K2aGQ5h
>>722
popenってfork & execvじゃなかったっけ?
724:login:Penguin
08/02/28 01:04:44 2c894vLr
$cat a001
abc
$cat a002
def
$cat a003
ghi
という内容の連番ファイルがあるときに、
a001,a002,a003ファイルそれぞれの先頭に
自身のファイル名を追記していくにはどのようにすればいいでしょうか?
$cat a001
a001
abc
$cat a002
a002
def
$cat a003
a003
ghi
725:login:Penguin
08/02/28 01:27:48 k7I0oIXn
for a in *; do
echo $a > temp
cat $a >> temp
mv temp $a
done
726:login:Penguin
08/02/28 01:53:39 2c894vLr
>>725
できましたありがとうございます!!
727:login:Penguin
08/02/28 11:40:05 xnWdeCI1
csvの編集をしているのですがカンマを含むデータがある場合に特定の列を削除するいい方法はないでしょうか?
例:
編集前) aaa,bbb,"ccc,ddd","eee",ff
編集後) aaa,"ccc,ddd",ff
カンマを含むデータは必ずダブルクォーテーションで囲まれているのですが
どの列にカンマを含むデータが存在するかは不明です。
192の方法だと特定の列は出せるのですが、複数列を表示することができないので。。。
728:login:Penguin
08/02/28 11:45:53 sfXUxgeO
>>727
シェルスクリプトでがんばるより↓あたり使ったら?
URLリンク(blog.livedoor.jp)
729:login:Penguin
08/02/28 12:17:28 DWKM9TyE
>>727
無駄にがんばってみた。PerlとかSQLiteとか使った方が絶対いい。
#!/usr/bin/awk -f
BEGIN {OFS=",";}
function csplit(s,a,c,f,i,j,k){delete a;for(i=j=1;;i++){
c=substr(s,i,1);if(c==""){a[k++]=substr(s,j,i-j);break;}
else if(c=="\""){if(f>0){if("\""==substr(s,i+1,1))i++;
else f=0;}else f=1;}else if(c==","&&f==0){a[k++]=substr(s,
j,i-j);j=i+1;}}return k;}
{n=csplit($0,array);print array[0],array[2],array[4];}
730:login:Penguin
08/02/28 20:37:03 VzdvBwjj
吐きそうだ。
字下げを知らないやつがまだこの世にいたのか。
731:login:Penguin
08/02/28 20:53:53 k7I0oIXn
>>730
じゃあお手本をちょっと見せてくれ
732:login:Penguin
08/02/28 22:39:21 VzdvBwjj
死ぬまで>>729記法で頑張りゃいいんじゃね?
それも個性だ。
733:login:Penguin
08/02/28 22:40:23 gxJgMbC8
敗北宣言はええ
734:login:Penguin
08/02/29 00:47:32 1XKkNNaQ
2ch に貼る時気をつけないと空白スペース詰められちゃうよね
735:login:Penguin
08/02/29 01:30:01 Pgw8LnNi
そこで&nbsp;
736:login:Penguin
08/02/29 01:41:57 bnE90VmD
行末にタブがある行を検索しようと
egrep '\t$'
としてもマッチしません。awkだと
awk '/\t$/'
でマッチするのですが、grepだとどう書けばいいのでしょうか?
737:login:Penguin
08/02/29 01:59:08 Pf9U77bc
元々、\tなどのメタキャラクタはgrepにもawkにもなかった。
GNU awkがPerlの影響を受けて拡張しただけ。
738:login:Penguin
08/02/29 02:10:07 bnE90VmD
そうなのかー・・・ちょっとしょぼーん。拡張されてもいい感じなんだけどね。
grep sed awk ぐらい正規表現は統一して欲しかったorz
739:login:Penguin
08/02/29 08:36:03 qSBWA6nK
タブを¥tと書きたかった理由が
シェルからコマンドラインにタブを打とうとして補完機能に取られるから、
であれば、Ctrl-V TAB でたぶんOK。
740:login:Penguin
08/02/29 09:40:38 HrPH8ECW
くだ質からこちらに誘導されたので、こちらで質問させて下さい。
ド素人質問で悪いのですが
$ cat text1.txt
1
2
3
$ cat text2.txt
3
4
5
という二つのファイルがあるとして、それを1行ずつ割り算したいのです。
結果としてこういう形になれば満足です。
$ cat result.txt
0.33
0.50
0.60
どのように記述すれば良いのでしょうか、シェルは普段bashを使っていますが、
もちろんshでも構いません。宜しくお願いします。
741:login:Penguin
08/02/29 09:42:18 /PNY/URb
>>740
ぱっと思いついたもの。
( echo 'scale=2' ; paste -d/ text1.txt text2.txt ) | bc
742:login:Penguin
08/02/29 09:48:46 HrPH8ECW
>>741
早速ありがとう御座います。こんな結果になりました。
.33
.50
.05
(standard_in) 5: parse error
53
4
5
pasteってこういうときにも使えるんですね。
parse errorとかbcとか知らないものも調べてみます。
743:740
08/02/29 09:58:48 HrPH8ECW
>>741
すいませんでした、エラーは自分の不備によるものでした。
きちんと結果表示されたので満足しています。ありがとう御座いました。
744:login:Penguin
08/02/29 10:03:24 Mcdovrgg
スクリプトで2台のDebian間を rcp でコピーしようと思っています。
expect を使って、スクリプトを作成し、それがうまく動作するところまでは
こぎつけたのですけれど、cronに登録すると動かなくなってしまいます。。。。
どうすれば解決するでしょうか?アドバイスをいただけると嬉しいです。
ちなみにスクリプトは
==========================-
#!/bin/sh
expect -c "
set timeout 20
spawn rcp -r {コピー元} {コピー先}
expect sword:\ ; send \"{パスワード}\r\"
"
==============================
こんな感じです。
ご教授のほどよろしくお願いします。
745:login:Penguin
08/02/29 10:04:13 /PNY/URb
>>744
カレントディレクトリがどこになってるのか、とか
権限に問題はないか、とか。
つーか rsync あたり使った方が楽じゃない?
746:login:Penguin
08/02/29 17:16:24 HrPH8ECW
シェルスクリプトでは無いのかもしれませんが、今日2度目の質問をさせて下さい。。
スレ初心者なので、スレ違いだったらすいません。
LPIC試験の勉強のために初めてjoinコマンドを使うのですが、うまくいかず困っています。
1.txtと2.txtに、1~999999の中から任意に500個程度選び出した数字を
それぞれフィールド1に、その他データをフィールド2以降に並べた
テキストファイル(↓こんな感じにソートしたのものです)
$ cat 1.txt $ cat 2.txt
50 aiu 50 abc 1111
80 eoka 140 def 2222
↓ ↓
999999 wawon 531243 xyz 3333
があるのですが、フィールド1に同じ数字が書かれた行を
joinで繋げたいんです。色んなサイトやLPICの勉強本を参考にしたのですが
$ join -1 1 -2 1 1.txt 2.txt
$ join -j 1 1.txt 2.txt
上の2つでは、300個くらいHITするはずなのですが、数個しか出てきません。
全く同じ行に同じ数字がフィールド1に入っているものだけが出力されているようです。
行数が数行しかないファイルではきちんと違う行でも結合してくれるのですが、
行数が多いとjoinでは無理ってことはありますか?
500行くらい処理してくれるものだと思ったんですが・・・泣。
シェルスクリプトでうまくいくのであればヒントを下さい、シェルはbashです。
747:login:Penguin
08/02/29 17:21:26 /PNY/URb
>>746
いまいちやりたいことがわからん。
5行くらいのファイルで例示してみてくれ。
しかし join なんて使ったことないな。
そんなん知らなくても実務ではまったく困らん。
perl かなんかで書く勉強でもした方が役に立つよ。
748:login:Penguin
08/02/29 17:52:51 HrPH8ECW
>>747
初めて学ぶスクリプト言語をシェルスクリプトにしようと決めたところでして、
perlとかは全く知らないんです・・・。ですが実務ではなく趣味なので楽しんでいます。
それと説明が下手ですいません(泣)再度説明させて下さい。
$ cat join1.txt
157 A B
160 C D
1291 I J
1373 K L
$ cat join2.txt
157 C D
160 E F
1373 K L
この2つのファイルをフィールド1個目でくっつけて
$ join -j 1 join1.txt join2.txt
157 A B C D
160 C D E F
1373 K L K L
にしたいんですが(上のファイルだとくっつきました)、各フィールド数が7個
各行数が500行程度、各ファイルサイズは30KBくらいになると、フィールド1個目の
数字が一緒でも、行が1個でもずれているとくっつかなくなり、行が同じものしか結合しなくなりました。
joinの精度が低いのが原因なのだとしたらお手上げなのですが、
何か他の原因は思いつきますでしょうか。perlとかSQLは全く無知なのでシェルで済ませたいんです。
749:746
08/02/29 18:07:44 HrPH8ECW
自己解決したわけではないのですが、やっぱり精度の問題みたいです・・・。
>>748の join1.txt と seq 150 200 > seq1.txt でjoinコマンドを使ってみたら結合できましたが
>>748の join1.txt と seq 1 2000 > seq2.txt でjoinコマンドを使ってみたら1つも結合出来ませんでした。
何か他の工夫で切り抜けたいと思います・・・失礼しました。
750:login:Penguin
08/02/29 21:29:21 d0BiI2Kq
>FILE1 と FILE2 は実行前に join フィールドの昇順にソートしておかなければならない(数値順のソートはだめ)。
だとさ。
751:login:Penguin
08/03/01 06:54:44 +XEPxk54
月に一度、メールログを調べたいのですが、
下記スクリプトを毎月1日朝に走らせています。
---
#!/bin/sh
pre_month_days=`date -d '1 days ago' +%d`
zcat /var/log/maillog.{1..$pre_month_days}.gz | 引き渡し先プログラム
---
これをシェルで走らせると
zcat: /var/log/maillog.{1..29}.gz: No such file or directory
となります。
ですが、
#zcat /var/log/maillog.{1..29}.gz
と手打ちすると、ズシャーっとログが表示されます、エラーも最後まで出ません。
変数展開されていないならまだしも、まったく原因がわかりません。
どういう理由で「No such file or directory」が出るのでしょうか?
752:login:Penguin
08/03/01 07:04:36 5EZ+WSHA
変数が入ってると{}って展開されないんじゃね?
753:login:Penguin
08/03/01 10:33:04 t3ZBWfKh
x=29
echo {1..$x}
してみようぜ。
754:751
08/03/01 17:46:18 IgLZSOLf
>>752-753
{1..29}
・・・ってことは、{1..29}そのものを探す=「No such file or directory」
ってことでしょうか?
ということは、pre_month_daysの文だけfor文で回して、
$temp_textにためていってから、解析プログラムに引き渡すと今思ったのですが、
この$temp_textというのは、シェルスクリプトが終了したときには、
消えてなくなるのでしょうか?どこかに残っているものなのでしょうか?
$temp_textだと、120万行ぐらいあるので、どこかに残っていれば圧迫しかねませんし・・・。
755:751
08/03/01 19:12:07 IgLZSOLf
す、すいません、
bashのfor文ってわけわかりません、( )とか{ }とか使うと思っていたのですが・・・。
zcat /var/log/maillog.$x.gz >> $temp
を繰り返して、
引き渡しプログラム $tempとしたいのですが、
for文(他のやり方もある?)をどう使えばいいのでしょうか?
756:login:Penguin
08/03/01 19:37:33 t3ZBWfKh
for文はCみたく配列を添え字でループするのと違って、
並べた要素1つ1つに対してループするというもの。
for x in 1 2 3 4 5; do
echo $x
done
とかな。
1から先月末日までの日の並びを作るために、Linuxならおそらくseqが使える。
# BSDだとjot
for $x in `seq $pre_month_days`; do
zcat ...$x...
done
とか。
757:login:Penguin
08/03/01 20:11:24 quX+uZMv
bash なら
for (( i = 0; i < 10; i++ )); do
echo $i
done
みたいな C っぽい for 文も使える。
758:751
08/03/01 20:32:55 IgLZSOLf
>>756-757
seqを使ってもエラーが出るので、
Cっぽくやってみました。
aaa.1.txt
aaa.2.txt
aaa.3.txt
を用意して、
------------------
#!/bin/bash
x=3
temp=""
for (( i=1 ; i < $x+1; i++ )); do
cat aaa.$i.txt >> $temp
done
cat $temp
-------------------
./test2.sh: line 5: $temp: ambiguous redirect
./test2.sh: line 5: $temp: ambiguous redirect
./test2.sh: line 5: $temp: ambiguous redirect
マズー(;´Д`)
am・big・u・ous[ mbjus ]
[形]
1 2通り(以上)の解釈を許す
2 (正体の)あいまいな;紛らわしい;はっきりしない, ぼんやりした, もうろうとした, おぼろげな
759:login:Penguin
08/03/01 20:49:48 pGgAUYn5
temp=""
書き込み先がないじゃんか。
temp=nulpo.txt
とか書き込み先がないと。
760:759
08/03/01 21:51:32 IgLZSOLf
い、いけました。
1ヶ月のメールログ1.4GBを食わせることができました。
ありがとうございます。
761:login:Penguin
08/03/01 22:39:09 pGgAUYn5
>>760
最初の>751をよく見てなかったんだけど、maillog.*がそんなに多くない(毎月かならず1~29になっている、てので)なら
for file in `ls /var/log/maillog.*`
do
zcat $file | 処理プログラム
done
でいいのでは。
それと焦って名前欄間違えないように~w
762:760
08/03/01 23:08:45 IgLZSOLf
あぅ、すいません。
logrotateはdailyの120でcompressなんです。
で、月次解析なんで、
その日の前日の「日にち」を取って、
zcatしなくちゃならなかったんです。
でも、これで月次の解析ができます~
763:login:Penguin
08/03/02 03:30:36 b0TlSvfI
いい流れた
764:login:Penguin
08/03/02 22:17:28 eyDRtewQ
>>760
ファイルに落とさない方法もあるぞ
引き渡し先がワンパス処理で無い場合は失敗する可能性
があるのでおすすめ出来ないが...
#!/bin/sh
pre_month_days=`date -d '1 days ago' +%d`
( for i in `seq 1 $pre_month_days` ; do
printf "/var/log/maillog.${i} "
done ) | xargs echo zcat | 引き渡しプログラム
exit $?
##
765:login:Penguin
08/03/03 09:55:39 4ARrqAXS
括弧はいらないね
766:login:Penguin
08/03/03 13:44:09 WtSCj+5U
>>751
eval zcat /var/log/maillog.{1..$pre_month_days}.gz | 引き渡し先プログラム
767:login:Penguin
08/03/03 23:36:12 5ghxiELA
んー
簡単なApacheログ解析&集計用スクリプト組みたいんだけどシェルスクリプトだとパフォーマンス悪いかな?
RubyやPythonは使えないんで、bash系シェルスクリプトかPerlでやってみたいんですが
ちなみにログフォーマットはこんな感じ
mxxxxxx.dynamic.ppp.asahi-net.or.jp - - [27/Feb/2008:15:46:04 +0900] "GET / HTTP/1.1" 200 101323 "URLリンク(hoge.piyo)" "Opera/9.25 (X11; Linux i686; U; ja)"
1リクエストに対して1行記録され、日付毎にファイルがある。(ファイル名の例:access_log_20080227)
465日分で容量2.5GB超とちょっと多いです。
やりたいことは項目別のランキングをテキスト出力だから、スクリプト自体は簡単そう
768:login:Penguin
08/03/03 23:43:14 Zrc2Vdg0
それはanalogとかでできないものでしょうか(´-`)
769:login:Penguin
08/03/03 23:46:01 5ghxiELA
>>768
実はそんな気がしてた
ありがとう('`)~♪
770:login:Penguin
08/03/04 00:34:34 61UoHuE3
ウワー早い
2分ちょいでこれだけ解析できるのかー
ああでも肝心なRefererランキングが出てないわ
Analogスレは4ヶ月近く誰も居ないみたいだしドウシタモンダカー
771:login:Penguin
08/03/04 09:48:48 kUaxbjJj
Bashを使ってシェルスクリプトの練習をしています
ファイルに特定の文字列が記載されていたら処理を分岐させるというシェルを書きたいと思っているのですがなかなか上手くいってくれません
何かいい方法がありましたら教えていただけないでしょうか
やりたい事はファイル内にHTMLという文字列が入っていたらAの処理 入っていなかったらデフォルトの処理をしたいと考えたので
下記のようにしてみました
TMP=`cat $YEAR$MONTH$DAY.csv |grep HTML`;
echo $TMP
case "$TMP" in
HTML)echo "HTML file"
;;
*) echo "##################"
esac
772:login:Penguin
08/03/04 09:54:01 oWYbuV9h
>>771
if grep HTML "$YEAR$MONTH$DAY.csv" >/dev/null; then
echo "HTML file"
else
echo "##################"
fi
773:login:Penguin
08/03/04 14:33:52 kUaxbjJj
>>772
ありがとうございます
教えていただいた通りにやったら問題なくできました
なぜcat|grepのときは上手くできなくて
grepの時は問題なくできるのかがちょっと分からないのですが
いろいろ調べてみようと思います
774:login:Penguin
08/03/04 21:04:44 rsD9V5Zj
HTML) を *HTML*) としてみようぜ。
775:login:Penguin
08/03/04 23:06:20 VrfR3qUe
>>774
やだよ
776:login:Penguin
08/03/05 00:05:43 EV9xTscM
grep -q を使わないのはポータビリティー重視だから?
777:かね ◆CHAS.7AvVo
08/03/05 10:22:08 JQ4a1dor BE:411629928-2BP(158)
>>777ゲット
778:login:Penguin
08/03/10 18:08:47 qsIz6iXz
論文を書くときに使うグラフをTopazというソフトを用いて作成しております。
その結果、グラフがepsファイルとして作成されるのですが、Windowsにもってくるとフォント関係でエラーが生じてしまいます。
なのでLinuxでフォントをアウトライン化しようと思い「eps2eps」というコマンド(シェルスクリプト?)を用いて
epsファイルのフォントをアウトライン化しました。
しかし、そうするとbounding boxがおかしくなってしまいます。
ですので元のepsをテキストエディタで開き、bounding boxの項目をコピペして対応しています。
それでようやく本題なんですがw
上のような作業を、複数のファイルに対して一括で行いたいのです。
for file in *.eps
do
eps2eps $file ${file%eps}2
done
のようなシェルスクリプトを使えば一括でアウトライン化epsができると思うのですが
さらに、インプットファイルをテキストエディタで開きbounding boxの項目をコピー
アウトプットファイルにbounding boxの項目を貼り付け
というような機能を持たせることはできるのでしょうか?
779:login:Penguin
08/03/10 19:47:47 PtxOKuxD
ed
780:login:Penguin
08/03/11 02:26:04 3Mwu+R1S
>>778
スクリプトに慣れた人ならすぐに作れる。
781:login:Penguin
08/03/12 23:51:51 wAPdko8t
>>780
?
782:login:Penguin
08/03/13 22:58:09 A7XLS93G
>>781
!
783:login:Penguin
08/03/13 23:17:56 SoJCaJfU
ああ、無情
784:login:Penguin
08/03/14 00:22:41 XhBWUHl1
シログミガンバレ
785:login:Penguin
08/03/18 03:16:13 TPZ/j5Uw
basenameが第二引数を取ることを今知った。
786:login:Penguin
08/03/20 22:15:42 N/tKbDY7
echo hoge=1で代入、表示両方できる知った件
787:login:Penguin
08/03/21 00:14:20 jeNVffRp
>>786
$ echo hoge=1
hoge=1
$ echo x"$hoge"x
xx
bash 2.05b@debian ではできないぞ。
環境を教えてくれ。
788:login:Penguin
08/03/21 01:11:50 3ULYcj2H
そんなのできたら困る。
789:login:Penguin
08/03/21 01:53:30 Mk2nPfge
>>539
>>537 最近はGUIの環境もシェルと呼んだりするらしいしね.
>ところで,シェルスクリプトをシェルと略す感覚が信じられない
>.せめてスクリプトのほうを残すべきじゃないのか,意味的に…
javascriptをjavaって呼ぶ奴おおいし、むきになんなよ
ちっせーな、何度も何度も
790:login:Penguin
08/03/21 03:00:16 tzWxNirH
>>789
javascriptとjavaだって別物じゃねーか
まったく別の意味にとられる表現は避けるべきだろ。
791:login:Penguin
08/03/21 03:26:20 yp4cACqr
javaの開発と言われて行ってみたら、javascriptの案件だった……
経験者を求めていた筈なので確認をとったら速攻で別案件に回されたけど。
(だれがどこでまちがったのかはしらない。たぶん、えいぎょうのアレがマタやらかしたんだろうけど)
792:login:Penguin
08/03/21 18:28:30 dmCthI0s
>>789
無能丸出しだな。
793:login:Penguin
08/03/22 00:13:19 /5OR7tiw
そうだよね、文字の"あ"を"い"って発音してもいいじゃん?
794:login:Penguin
08/03/22 06:15:29 EkMxwp6R
>>792
頭の構造が粗雑なんだろうね。
しかし無能とは決めつけられないよ。土方としては有能かも知れないじゃないか。
795:login:Penguin
08/03/22 13:14:51 I+OQFn9y
>>794
井の中の蛙、大海を知らず。
796:login:Penguin
08/03/22 14:00:07 4xBJlBA7
javascriptをjavaと呼ぶ井戸の外の世界
797:login:Penguin
08/03/22 14:23:40 79XeAASw
もうすべて「あれ」と「あれ以外の何か」でいいんじゃね?
「この開発にはあれが必要だな」
「そうですね、あれも必要です」
「あれのほうはどうだ」
「あれはあれ以外のあれでやりましょう」
「あれはあれだったからな」
募集要件にはエスパー希望と書けば何も問題ない。
798:login:Penguin
08/03/22 14:25:08 ldkQa/0V
残念なことにハードディスクドライブをハードと略すおっさんを結構見かけるのがリアル世の中なのねん。
javascriptをjavaと呼んじゃうおばちゃん、ねーちゃんだってざらにいるよ。
どっちかというと>>789のほが常識的な気がす
799:login:Penguin
08/03/22 15:16:06 OrPubXKD
>>789
perlスクリプトをPerlと呼んだりPerlでやると言ったり
awkスクリプトをawkと読んだりawkでやると言ったり
それと同じでは
800:login:Penguin
08/03/22 16:27:56 5bvfNtQw
省略したら同種の別の言葉になるかどうかだな。
801:login:Penguin
08/03/22 16:38:49 ldkQa/0V
厳密なことをいえばさ、シェルって単体で言う場合はシェルスクリプトの略じゃないのよね。
(>>537,>>539はこれにつっこんでいる)
OSのカーネルに対する、(コマンド)インターフェイス外殻(カーネルの外層を覆う殻の概念)を
現在はCUI/GUIの別を問わずにシェルと呼んでる。このうちGUIの場合はグラフィカルシェルとか
CUIの場合はコマンドラインインタプリタとか呼ぶのだけど、このコマンドラインインタプリタを
Linuxを含めたUNIX系OSでは単にシェルと呼ぶ慣習がある。昔UNIXにはGUIなんて無かったらね、
シェルといったらコマンドラインインタプリタのことだ、ということに定着していたわけね。
いわゆるsh, bash, csh, tcshのshがシェルだ罠。
シェルスクリプトの略がシェルじゃなくて、シェルで動くスクリプトがシェルスクリプトなの。
順番が逆なのよ。
awk/perlもawk(言語)/perl(言語)のスクリプトがawk/perlスクリプトなのであって
awk/perlスクリプトの略がawk/perlなんじゃないよ。
まぁどうでもいいけどな。
以上を踏まえてあえて言えば
たしかにシェルとシェルスクリプトは別物だしjavaとjavascripは別物だし、
細かいこと言えばGUIだってグラフィカルシェルなのだ(>>539)が
あんま細かいことをいうとバカみたいだ。つーか狭量に見える。
というわけで>>789のほが同意できる。聞き上手って言葉があるじゃない?
802:login:Penguin
08/03/22 17:33:00 /5OR7tiw
でだ、>>539がシェルスクリプトをシェルと略さずにせめてスクリプトと略しゃ
いいだけじゃねーかと建設的な提案をしたのに、他の軽量プログラミング言語
までもちだし、略した言葉を受け取った人間の能力の問題じゃね?
となるこのスレの流れに、思わず小岩井ミルクコーヒーを噴いた。
>>791の様に読解および対話能力が備わってないと、悲惨な状況のド真中に
パラシュート降下させられる奴がわんさかでそうだ。単語の略し方の問題で。
803:login:Penguin
08/03/22 18:27:12 g5kThUF3
>たしかにシェルとシェルスクリプトは別物だしjavaとjavascripは別物だし、
>>800の言う通り、
シェル・スクリプトをシェルと呼んでも文脈から意味は通じるが、
javascriptをjavaと呼んでしまうと別のものを指してしまう。
混同するな。
804:login:Penguin
08/03/22 19:12:09 //sUM775
WikipediaをWiKiとかね。
805:login:Penguin
08/03/22 19:20:26 ldkQa/0V
では、世の間違いをどこまでも正していってくれ。
思い浮かべて欲しい世の人々は道の傍らでJavaとJavascriptの違いを
切々と説く君たちに聖者が来れり、天国は来れりと歓喜することであろう。
が、まぁ少なくとも営業の彼と経理の彼女、はす向かいの鈴木さんに
今後一切飲みに誘われなくなるのは間違いと思うけどね。
806:login:Penguin
08/03/22 19:26:48 //sUM775
>>805 は啓蒙活動を自粛するようです。
807:login:Penguin
08/03/22 19:39:22 pZoAGsoS
モヒカン族と村人ですから
808:login:Penguin
08/03/22 19:39:41 d90KTFFK
>>805
さっさと氏ね
809:login:Penguin
08/03/22 20:07:27 /5OR7tiw
>>805
AとBは異なるという説明し、その異なりを無視して同一のもととして扱うと
余計なコストが発生するから、次からはきちんと区別してくれという依頼が
出来ない風土、もしくは、意思決定にかかわる情報を扱うやつが説明しても、
その異なりを理解できないなら、そんな会社つぶれるだろ常考。
また、痛いレスみてJavaとJavascriptも区別して話す新入りが入ってきたら、
それこそ大迷惑だ。
>>791のえいぎょうのアレは赤っ恥ですめばいいけど。発注元からみると、
大丈夫かこの営業さんと思ったに違いない。
という燃料を補給してみた。
810:login:Penguin
08/03/22 20:29:32 ldkQa/0V
まぁ派遣は大変だよな。ガンガレ。
811:login:Penguin
08/03/22 21:23:56 I+OQFn9y
>>797
つまり春奈と偽春奈で仕事をすると。
812:login:Penguin
08/03/22 21:25:26 ldkQa/0V
>>810だが、今見たら言い方が悪かった。なんだか煽っているようにもとれるかもな。
すまんかった。そういう意味じゃなくて、今時、派遣ぽい職場の人は技術職まで
そんな感じになってきて大変だと思う。漏れにも似たような経験あるからさ、
マジ、ガンがって欲しいと思ってる。
言われたのと行った先で条件が違うなんてのはちょくちょくあって
アホな会社にも言えなくて当人が泣きをみてしまうつーのは辛いよな。
やる気ならなんとかユニオンとかそっちに話をもってくしかないわけだが
自分の身を守るのが第一かと思うよ。
まぁここでそんなこと言っててもしょうがないわけで、そういう言い方になった。
813:login:Penguin
08/03/24 00:53:04 W0JgcRQd
教えて先生。つーか、自分がやった時に苦労したんだけど、
プロな人はもっと簡単な方法を知ってるんじゃないかな的なお題。
ひょっとして歴代のスレで既出の可能性ありだけど許して。
ディレクトリに
お宝画像(1).jpg お宝画像(2).jpg .... お宝画像(100072).jpg お宝画像(100073).jpg
が入っている。ファイル名はutf8の日本語、連番はカッコ付きで
連番途中に欠番がある可能性がある。これらのファイルをすべて
ero-pic000001.jpg ero-pic000002.jpg .... ero-pic100072.jpg ero-pic100073.jpg
という風にリネームしたい。どうしたらいいでしょう?
814:login:Penguin
08/03/24 01:03:25 zratqhRJ
プログラミングの基礎を学べば余裕でできると思うよ
815:login:Penguin
08/03/24 01:09:16 1V6v3lmW
実は漏れは結局Cでやったんだけどね。シェルで簡単にやるにはどうするの?
816:login:Penguin
08/03/24 01:11:56 BAIAfq4T
rename や mmv を使うかな。
817:login:Penguin
08/03/24 01:16:04 eiDHSNtl
perl版renameで
rename '/\d+/ and $_=sprintf(q{ero-pic%06d.jpg}, $&);' お宝画像*.jpg
とか?
818:login:Penguin
08/03/24 01:23:02 RkCnK2Rz
ls > file_list.txt して中身を
mv "お宝画像(1).jpg" "ero-pic00001.jpg" とかに変えて
sh file_list.txt
するかな