[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 21:40 / Filesize : 275 KB / Number-of Response : 969
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合@LINUX Part3



1 名前:login:Penguin [2007/07/10(火) 23:17:13 ID:qGthZdME]
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

【sed】シェルスクリプト総合@LINUX Part2【awk】
pc11.2ch.net/test/read.cgi/linux/1154578200/
pc8.2ch.net/test/read.cgi/linux/1121994321/

>>2-5あたりに色々と。


433 名前:login:Penguin mailto:sage [2008/01/14(月) 12:00:15 ID:ZjONjaHo]
つ netpbm



434 名前:login:Penguin mailto:sage [2008/01/14(月) 12:12:55 ID:6n5zEajJ]
つimagemagick


435 名前:login:Penguin mailto:sage [2008/01/14(月) 14:01:26 ID:Or9vH7Fn]
メールアドレスの@以降の最後の国を表すCountry Codeの部分だけを抜き出すには
どのような正規表現を使えば良いでしょうか?

@hotmail.co.jp の.jp の部分を見る感じです。
.jp以外は無視する、という感じです。これで日本のメールしか相手にしない事になりますよね。

436 名前:login:Penguin mailto:sage [2008/01/14(月) 14:04:07 ID:ZjONjaHo]
spam避け?

日本からも.comや.netや.orgや.infoや.bizや.acや.tvや.toや(以下略)の
アドレスでメールが送られることはあるぞ。


437 名前:login:Penguin mailto:sage [2008/01/14(月) 14:04:25 ID:Or9vH7Fn]
$.jp

↑これでいいんでしょうか?正規表現全く知らない状態でネットでちょっと検索してみたのですが・・・

438 名前:login:Penguin mailto:sage [2008/01/14(月) 14:05:05 ID:Or9vH7Fn]
あっちゃー、そうなんですか・・・
海外のメールを相手にしない方法って無いんですかね・・・
英語でViagraとかうるさいんですよ。

439 名前:login:Penguin mailto:sage [2008/01/14(月) 14:17:08 ID:6n5zEajJ]
/[あ-ん]/?
ひらがながないメールは無視してもよかろう。

440 名前:login:Penguin mailto:sage [2008/01/14(月) 14:37:34 ID:FCIPzPAY]
ヘッダの Content-Type を見て弾くとかどうよ?

^Content-Type: .*iso-2022-jp


441 名前:login:Penguin mailto:sage [2008/01/14(月) 14:42:36 ID:6n5zEajJ]
最近はutf-8なのも多いよ。




442 名前:login:Penguin mailto:sage [2008/01/14(月) 14:54:07 ID:JtG94m55]
utf-8 は違法で、危険運転致死罪が適用になるんじゃ?

443 名前:login:Penguin mailto:sage [2008/01/14(月) 22:54:28 ID:RfE0b+o0]
>>437
\.jp$

では?

444 名前:login:Penguin mailto:sage [2008/01/16(水) 13:17:12 ID:ZRO/FTzi]
テキストファイルを、最後の3行を除いて出力したいのですが
何か良い書き方はないでしょうか。
sed '$d' xxxx | sed '$d' | sed '$d' と書くくらいしか思い付かなくて。

445 名前:login:Penguin mailto:sage [2008/01/16(水) 14:26:14 ID:1obpvu1A]
>>444
head -n -3 foobar.txt

446 名前:login:Penguin mailto:sage [2008/01/16(水) 17:01:38 ID:IKqjky5V]
awk '{a[NR]=$0}END{for(j=1;j<=NR-3;j++) print a[j]}' a.txt

447 名前:login:Penguin mailto:sage [2008/01/16(水) 18:25:12 ID:ZRO/FTzi]
>>445
head のオプションは見落としてました…ありがとうございます

448 名前:login:Penguin [2008/01/16(水) 21:56:01 ID:KAlEWwYc]
ランダムな数字が欲しいとき,どうするのが簡単?
1. $$
2. $RANDOM
3. /dev/urandom
4. 時計
あたりを思いついたんだけど

449 名前:login:Penguin mailto:sage [2008/01/16(水) 22:14:57 ID:yh54UVVr]
ワシは、ランダムな数字の用途により生成手段を変えてるような気がする。

450 名前:login:Penguin mailto:sage [2008/01/16(水) 22:16:21 ID:KAlEWwYc]
1. 偏りそう
2. bash依存
3.4. 面倒
という問題点があるから,誰かいい方法教えてくれないか?

451 名前:login:Penguin mailto:sage [2008/01/16(水) 22:19:14 ID:KAlEWwYc]
>449 たしかに用途によって求められる強さが違う気がする.
とりあえずこうしとけ的な汎用的な方法はないんかな.
いちばん手軽な方法が知りたい



452 名前:login:Penguin mailto:sage [2008/01/16(水) 22:47:32 ID: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 mailto:sage [2008/01/16(水) 23:09:59 ID: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 mailto:sage [2008/01/16(水) 23:21:36 ID:KAlEWwYc]
>452,453
なるほど.date +%Nはいい感じ.
jot便利そうだよ,jot.犬にもこんなの欲しいな.
ありがとう

455 名前:login:Penguin mailto:sage [2008/01/16(水) 23:24:18 ID:HQvmxN1E]
od -t u1 /dev/urandom | awk '{print $2;exit}'

456 名前:login:Penguin mailto:sage [2008/01/16(水) 23:33:28 ID:PJonPFmQ]
r=`fortune | md5sum - | sed 's/^¥(........¥).*/¥1/'`
r=`printf %d 0x$r`

ごめんなさいごめんなさい。


457 名前:login:Penguin mailto:sage [2008/01/16(水) 23:51:47 ID:puzD1M+G]
普通に perl -e 'print int(rand(1000))' じゃダメなの?(perl5前提だけど)



458 名前:login:Penguin mailto:sage [2008/01/16(水) 23:55:16 ID:KAlEWwYc]
>457 これだけのためにperlやawkを出してきたくないという貧乏心があってwww

459 名前:login:Penguin mailto:sage [2008/01/17(木) 01:30:17 ID:xe77Y4ah]
時は金なり、というじゃない

460 名前:login:Penguin mailto:sage [2008/01/17(木) 01:45:37 ID:hGbWYs9C]
つーか、乱数ってこれだけのため、っていうほど簡単なものじゃないと思う。
そういうものが必要な処理はシェルじゃなく、ちゃんとそれなりの言語でプログラムしたほうがいいかも。

461 名前:login:Penguin mailto:sage [2008/01/17(木) 09:08:26 ID:MJ2pzO6M]
確かに簡単な乱数ならともかく、ちゃんとした乱数が欲しい処理は言語引っ張り出したほうが良いかもね



462 名前:login:Penguin mailto:sage [2008/01/17(木) 09:18:44 ID: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 mailto:sage [2008/01/17(木) 09:28:02 ID: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 mailto:sage [2008/01/17(木) 10:59:36 ID:bFGNQCBf]
遅いのは date +%N じゃなくて while のループだと思うよ。

465 名前:login:Penguin mailto:sage [2008/01/17(木) 11:37:17 ID:LfhUWWyD]
>>450
> 2. bash依存
ksh88由来らしい
tp://www.cs.princeton.edu/~jlk/kornshell/doc/man88.html
ksh互換を期待できるなら使ってもいいんじゃね

466 名前:login:Penguin mailto:sage [2008/01/18(金) 01:58:10 ID:S6Zw/ddB]
/usr/games/random -e 100; echo $? は?

467 名前:login:Penguin mailto:sage [2008/01/18(金) 07:42:17 ID:YTGcRcKS]
>>466
/usr/gamesってそれ何年前のWSのディレクトリ構成だよ...

468 名前:login:Penguin mailto:sage [2008/01/18(金) 17:40:50 ID:wVas3OI3]
findの検索結果でディレクトリの場合は最後に「/」をつけさせたいのですが、いい方法はあるでしょうか?


469 名前:login:Penguin mailto:sage [2008/01/18(金) 17:50:43 ID:YTGcRcKS]
find . -exec ls -Fd {} \;

470 名前:login:Penguin mailto:sage [2008/01/18(金) 22:33:39 ID:EJvy1m4k]
>>468
find (検索ディレクトリ) -type d -printf "%p/\n" -or -print


471 名前:login:Penguin mailto:sage [2008/01/18(金) 22:55:09 ID:S6Zw/ddB]
>>467
最新のLinuxの(いやほんと。これだけは伝統的理由で残ってるのかな)



472 名前:login:Penguin mailto:sage [2008/01/18(金) 23:22:22 ID:6BHP4h96]
>471 鳥は?

473 名前:login:Penguin mailto:sage [2008/01/19(土) 01:14:55 ID:ZLNpfSkQ]
>>472
Debian (sid)。まあ bsdgames とかまんまレガシーなパッケージだけだけどね。


474 名前:login:Penguin mailto:sage [2008/01/19(土) 05:58:20 ID:JWtUz7T2]
Debian etch にも/usr/games はあるな。
中みたらbannerとfortuneが入ってた。

475 名前:login:Penguin mailto:sage [2008/01/19(土) 08:07:34 ID:njld/y5g]
シェルスクリプトの本で実用例の多い本ってありませんか?

476 名前:login:Penguin [2008/01/19(土) 17:07:33 ID: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 mailto:sage [2008/01/19(土) 18:46:40 ID:ZLMZWyE0]
cat /tmp/test.txt | awk 'NR%4{printf("%s,",$0)} !(NR%4) {print $0} '

余りが出たら最後カンマ付きで出力されちゃうけど

478 名前:login:Penguin [2008/01/19(土) 18:55:41 ID:NuJUp+KH]
>>477
完璧な物ありがとうございます
今迄sedばかり使っていたのですがawkすごいですね

awkの勉強させていただきます

479 名前:login:Penguin mailto:sage [2008/01/19(土) 18:59:10 ID:IrN8xoLt]
>>477 あらupしようとしたら同じだったわ。
awk '{printf"%s%s",$0,(NR%4?",":"\n")}' < start.txt

480 名前:login:Penguin mailto:sage [2008/01/19(土) 19:02:55 ID:NuJUp+KH]
>>479
ありがとうございました
とても参考になります

481 名前:login:Penguin mailto:sage [2008/01/19(土) 19:43:02 ID:rxOILVvf]
vi start.txt
q94J↓q10000@9
:%s/ /,/g
:w end.txt




482 名前:login:Penguin mailto:sage [2008/01/19(土) 19:59:13 ID:58USgOmq]
>>473-474
Debianではゲームの実行バイナリは/usr/gamesに置かれるぜ。
最近はポリシーチェッカも警告を出すようになったから、lennyまでには移動完了するんじゃね。
lintian.debian.org/reports/Tpackage-section-games-but-contains-no-game.html
lintian.debian.org/reports/Tpackage-section-games-but-has-usr-bin.html

483 名前:login:Penguin mailto:sage [2008/01/19(土) 21:00:37 ID:ZLNpfSkQ]
>>482
なんでだろうね?
FHS誤解してたかと読み直したらそんなことないし。理由がわからん。

484 名前:login:Penguin mailto:sage [2008/01/19(土) 21:04:24 ID: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 mailto:sage [2008/01/19(土) 21:14:55 ID:Xt/fDApd]
FHSとかグローバリゼーションとか国際化とか
そういうのが全て悪の元凶。

486 名前:login:Penguin mailto:sage [2008/01/19(土) 22:06:40 ID:ZLNpfSkQ]
FHSは/usr/localと/etcを綺麗にしてくれる。
それだけでも推進されてしかるべき。

487 名前:login:Penguin mailto:sage [2008/01/20(日) 02:02:52 ID:dexE1e0m]
/usr/gamesはオプションなのに、/usr/local/gamesは必須扱いなところを見れば分かるとおり
ディトリビュータはゲームなんか提供すんな、ということなのだよ。

つまりゲームを提供しているDebianは人々を堕落させる悪のディストリビュータなのだ!

488 名前:login:Penguin mailto:sage [2008/01/20(日) 02:23:04 ID:kH+ebKTA]
>>487
なにその陰謀史観(w

単に /usr/ 直下はディストリの管轄だし自分で決めろ、
一方で /usr/local/* は空フォルダ切っておく以上は認められないから
代わりとして、せめて誘導できるように切っておけ、ということかと。

FHSで自分的に従来慣習と比較して見慣れないのは/srvだな。
どこのUNIXでの慣習だったんだろう?


489 名前:login:Penguin mailto:sage [2008/01/20(日) 02:55:38 ID:M1QHfiRt]
つっこみどころは
/usr/games/bin/fortune じゃなくて
/usr/games/fortune ってとこじゃなかったのかー

490 名前:login:Penguin mailto:sage [2008/01/20(日) 04:01:16 ID:FZKKsnAp]
>>476
sed ':b;1~4,+2{N;s/\n/,/;bb}'

sedも心の片隅にでも置いておいてやってくだされ。


491 名前:login:Penguin mailto:sage [2008/01/20(日) 04:20:45 ID:IwRos1VB]
>>489
管理者のPATHからゲーム関係を除外するのが目的だろうから
/usr/games/binとサブディレクトリを掘る必要はないんじゃね。



492 名前:login:Penguin mailto:sage [2008/01/21(月) 02:31:10 ID:HJiECvMS]
>>490
そんな記法初めて見た…
どうなってんの???

493 名前:login:Penguin mailto:sage [2008/01/21(月) 02:55:10 ID:QTxOOwHl]
アドレス指定がGNU拡張?

494 名前:login:Penguin mailto:sage [2008/01/21(月) 11:41:48 ID:JvqHER/W]
>>476
paste -d, - - - -

paste も心の片(ry


495 名前:login:Penguin mailto:sage [2008/01/21(月) 14:42:32 ID: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 mailto:sage [2008/01/21(月) 14:51:31 ID:N+zVQlnl]
>>495
paste

497 名前:login:Penguin mailto:sage [2008/01/21(月) 14:53:35 ID:svPtjQeo]
>>496
ありがとうございました。
ぐぐるまでもヘルプ読むまでもなく、
適当にいじっただけでそうなりました。

498 名前:login:Penguin mailto:sage [2008/01/22(火) 11:11:17 ID: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 mailto:sage [2008/01/25(金) 13:18:49 ID: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 mailto:sage [2008/01/25(金) 15:41:59 ID:5ugSsaO2]
>>499
そのままだと画像ファイル名やパスに空白があると動かないけど、いいのか?

501 名前:login:Penguin mailto:sage [2008/01/25(金) 17:04:10 ID: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 mailto:sage [2008/01/25(金) 17:51:17 ID: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 mailto:sage [2008/01/25(金) 18:55:56 ID:u9KTnE0i]
>502 事故レス
expr はクオートしちゃまずかった

504 名前:login:Penguin mailto:sage [2008/01/26(土) 00:32:05 ID: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 mailto:sage [2008/01/26(土) 00:54:55 ID:a+SvfS+1]
>>504
おまいさんの find には -iname は無いのか?
あと、bash なら自前で算術計算できるよ

bsetbg "${TARGET[RANDOM % ${#TARGET[@]}]}"

506 名前:login:Penguin mailto:sage [2008/01/26(土) 01:31:49 ID:Gp61cAWI]
>おまいさんの find には -iname は無いのか?
あ、これは知らんかった。有り難う。
>あと、bash なら自前で算術計算できるよ
こちらは知っていたけど、元ネタに合わせんと。

507 名前:login:Penguin mailto:sage [2008/01/26(土) 11:11:47 ID:NixStw3D]
#!/bin/sh
filesize=('du -h ~/file.tmp')
$loglen > ~/filesize.txt

という感じでfile.tmpのファイルサイズを出力したいのですが
出力結果に不要な部分があります。
欲しい部分だけ切り取るには、どうすればいいでしょうか?
よろしくお願いします。

100k /home/user/file.tmp
~~~~~  ~~~~~~~~~~~~~~~~~~~~
 ↑         ↑
欲しい     要らない部分

508 名前:login:Penguin mailto:sage [2008/01/26(土) 11:20:53 ID:NixStw3D]
#!/bin/sh
filesize=('du -h ~/file.tmp')
$filesize > ~/filesize.txt

間違えてしまいました。こんな感じです。

grepで抽出するオプションの書き方も思い付かず
スクリプトで処理するには・・・?と、行き詰まってます。

509 名前:login:Penguin mailto:sage [2008/01/26(土) 11:34:50 ID:opXPKDAo]
>>508
cut (coreutils)

510 名前:login:Penguin mailto:sage [2008/01/26(土) 11:48:51 ID:NixStw3D]
>>509
ヒントありがとうございます。
使い方を調べてみます。

511 名前:login:Penguin mailto:sage [2008/01/26(土) 12:47:23 ID:NixStw3D]
>>509
もう少しヒントをください。

cat と coreutils のどちらかを使うや
cat か coreutilsのどちらかを使うかや
レスの意図を示していただけるとありがたいです。

シェルスクリプト歴数時間で理解が及ばなく申し訳ないです。



512 名前:login:Penguin mailto:sage [2008/01/26(土) 12:52:39 ID:K0Rp0izE]
>511 ちょっとでもぐぐってみたのかと.
あと猫じゃなくて切るほうな.

513 名前:login:Penguin mailto:sage [2008/01/26(土) 13:12:20 ID: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 mailto:sage [2008/01/26(土) 13:15:18 ID:K0Rp0izE]
>513 catじゃなくてcut.たぶんこれ一発でやりたいことはできると思うから調べてみな.

515 名前:login:Penguin mailto:sage [2008/01/26(土) 13:22:31 ID:NixStw3D]
>>512,514
ありがとうございます。
素で間違えていました。

調べてみます。

516 名前:login:Penguin mailto:sage [2008/01/26(土) 13:24:02 ID:ShBosd97]
stat -c %s
ではだめなのか

517 名前:login:Penguin mailto:sage [2008/01/26(土) 13:43:18 ID: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 mailto:sage [2008/01/26(土) 14:22:43 ID:/buRKO/4]
>>517
これでいいだろ。
du -h /home/user/file.tmp | awk '{print $1}' > ~/filesize.txt

519 名前:login:Penguin mailto:sage [2008/01/26(土) 16:30:30 ID: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 mailto:sage [2008/01/26(土) 16:43:00 ID:/buRKO/4]
>>519
stat -c %s /home/user/file.tmp | awk '{printf "%sk" ,$1}' > ~/filesize.txt


521 名前:login:Penguin mailto:sage [2008/01/26(土) 23:58:52 ID:NixStw3D]
>>520
応用ありがとうございます!
感謝。



522 名前:login:Penguin mailto:sage [2008/01/29(火) 13:18:07 ID:8n8HPqGB]
columnコマンドがない環境でインデント合わせをしたいのですが、
何か良い方法はあるでしょうか?

523 名前:login:Penguin mailto:sage [2008/01/29(火) 15:57:53 ID:8n8HPqGB]
lsコマンドで、ファイルのatimeやctimeを取得する方法はあるでしょうか。
HP環境なので、Linuxのstatコマンドがなくて途方にくれています。

524 名前:login:Penguin mailto:sage [2008/01/29(火) 16:05:29 ID:qGMFgswu]
>>523
Linux の話じゃないなら板違い。

525 名前:login:Penguin mailto:sage [2008/01/29(火) 16:33:43 ID:yAbAmnAs]
ファイルから目的の行を削除して上書きしたいとき,
sed -e 2d file >tempfile
mv tempfile file
のようにすればできるんですが,テンポラリファイルを使わない方法はありますか?

526 名前:login:Penguin mailto:sage [2008/01/29(火) 16:37:12 ID:qGMFgswu]
>>525
GNU sed なら -i で。

527 名前:login:Penguin mailto:sage [2008/01/29(火) 21:52:45 ID:6iHka9Si]
リダイレクトとサブシェルを駆使してうまいことinplace editをやる技が
あったはずなんだがどうやってぐぐればいいかわからん。


528 名前:login:Penguin mailto:sage [2008/01/29(火) 23:11:45 ID:k/ZizWnP]
つ named pipe

529 名前:login:Penguin mailto:sage [2008/01/30(水) 00:25:54 ID:/azTEfDv]
こんな感じのやつか?

 $ echo hoge > hoge
 $ (rm hoge; (echo fuga; cat) > hoge) < hoge

要はサブシェルに開かせておけば中で上書きしても内容は
デスクリプタから参照できるからそれでin-place処理できるって奴だな。

上は手抜きだけど、どっかのFAQにデスクリプタ付け替えまくりの例題が
載ってたのだけ覚えてる。csh-whynot文書あたりかも?


530 名前:login:Penguin mailto:sage [2008/01/30(水) 00:35:03 ID:KwdpVGiV]
おおう、そんなかんじだったかも。thx



531 名前:login:Penguin mailto:sage [2008/01/30(水) 20:21:01 ID:6DxEwSig]
すいません
ちょっと今シェルの作り方で困っているのですが

やりたいことは
一つのフォルダに入っているファイルを、ファイル名によって3つのフォルダに振り分けたいのです。
その際に、どのファイルをどのフォルダに移動するのかはシェルの中に記述するのではなく、
ファイル名の一覧が書いてあるtxtファイルを一行ずつ読んで振り分けたいのです。
ですが、作り方が今いちわかりません。

例えばA,B,Cと分かれていたら
1、Aのフォルダに振り分けるファイル名が書かれたtxtファイルを読む
2、同じファイル名がヒットしたらAに送る
3、次にBのフォルダに振り分けるファイル名が書かれたtxtファイルを読む
4、同じファイル名がヒットしたらBに送る

ファイル名が書かれたtxtファイルはA用B用C用の3種類用意します。

どうやって作ればいいのでしょうか?



532 名前:login:Penguin mailto:sage [2008/01/30(水) 20:36:32 ID:CiuX3/ZK]
シェルの作り方なんぞ知るかい。

533 名前:login:Penguin mailto:sage [2008/01/30(水) 20:38:30 ID:0RlCwXSW]
宿題は自分でやれ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<275KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef