シェルスクリプト総合 その34

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2020/08/21(金) 15:17:55.64ID:mArnj/tT
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/

09529462020/11/18(水) 16:43:39.93ID:oGkGNlvA
正しく出力される。
実際には、c, d, f などは出力されていないけど

a,2020-11-17,aaa
b,2020-11-18,bbb
c
d
e,2020-11-21,eee
f
g,2020-11-23,ggg
h,2020-11-24,hhh
i
j,2020-11-26,jjj
k,2020-11-27,kkk
l,2020-11-28,lll
m
n
o,2020-12-01,ooo
p,2020-12-02,ppp
q,2020-12-03,qqq
r
s,2020-12-05,sss
t,2020-12-06,ttt
u

0953デフォルトの名無しさん2020/11/18(水) 17:46:13.72ID:XsHXPiSN
>>952
ありがとう

何故だろう

0954デフォルトの名無しさん2020/11/18(水) 22:39:32.53ID:c4VI5UKm
フィールド数が想定がところがあるとエラーで getline が呼ばれなくて
var がそのままになったりするのかも?

0955デフォルトの名無しさん2020/11/18(水) 22:40:20.82ID:c4VI5UKm
想定が -> 想定外な

0956デフォルトの名無しさん2020/11/18(水) 23:00:38.15ID:XsHXPiSN
>>954
これかも
1列目にブランク入りのデータが入ってた

0957デフォルトの名無しさん2020/11/18(水) 23:22:35.65ID:2l0B+GoX
AWKのgetlineってめっちゃ便利よね。
これ使い始めたらもうシェルスクリプトじゃなくてAWKスクリプトになるけどw

0958デフォルトの名無しさん2020/11/18(水) 23:25:59.76ID:XsHXPiSN
>>956
いや違うわ
ブランク入ってたらそもそも$2がxにならない

0959デフォルトの名無しさん2020/11/19(木) 02:55:11.75ID:kL0AGIHT
まず再現するデータをよこせ

0960デフォルトの名無しさん2020/11/19(木) 07:48:43.53ID:jemYGepS
元ネタの人じゃないけど以下のデータでおかしくなった。

a.txt
a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c x Nov 18 2020 ccc
d x Nov 19 2020 ddd
d x
e x Nov 19 2020 eee
f x Nov 20 2020 fff

d の行以降の日付が今日の日付になった。Ubuntu 16.04.7。
なんかデータをちょっといじると再現しなくなるような感もある。

09619462020/11/19(木) 10:41:14.25ID:uVXRNBYq
>>960
d x
という変な行も、データに入れるのか?

Windows 10, WSL2, Ubuntu 18.04 では、下のように出力された

a,2020-11-17,aaa
b,2020-11-18,bbb
c,2020-11-18,ccc
d,2020-11-19,ddd
d,2020-11-19,
e,2020-11-19,eee
f,2020-11-20,fff

0962デフォルトの名無しさん2020/11/19(木) 21:37:07.41ID:ACSoydf1
>>961
そう。わざと壊れたデータで遊んでみているw

確実に再現できるバグは、ある意味治すのは易しい。
再現方法がよくわからんバグは...どうしたら再現するかを考えるのも一興かとw


あしまった、データが違ったかも。こうかな。

a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c x Nov 18 2020 ccc
d x Nov 20 2020 ddd
d x
e x Nov 20 2020 eee
f x Nov 20 2020 fff

0963デフォルトの名無しさん2020/11/19(木) 21:49:05.89ID:pLwLwTYy
ちなみにdateコマンドは日付が空だと今日の日付を入れるようなので
Nov 20になる前に試すのがおすすめw

09649462020/11/20(金) 02:15:19.68ID:pwTm9Uxw
このデータでやった。
b が今日の日付になる

a x Nov 03 2020 aaa
b x
c x Nov 05 2020 ccc
d x Nov 06 2020 ddd

出力
a,2020-11-03,aaa
b,2020-11-20,
c,2020-11-05,ccc
d,2020-11-06,ddd

0965デフォルトの名無しさん2020/11/20(金) 14:19:37.94ID:EGUOn9wt
>>964
うん、それは単に >ちなみにdateコマンドは日付が空だと今日の日付を入れるようなので
だと思う。

自分の環境で >>962のデータを食わせたら
a,2020-11-17,aaa
b,2020-11-18,bbb
c,2020-11-18,ccc
d,2020-11-20,ddd
d,2020-11-19,
e,2020-11-19,eee
f,2020-11-19,fff

となった。e, f で空のdの所で得た日付を使われている感じ。ちょっとおもしろい。

0966デフォルトの名無しさん2020/11/23(月) 08:04:11.39ID:bkMAXdue
ループ処理をバックグラウンドで流すと500個ぐらいプロセスができて
まったく動かない。いい方法ないかな。

0967デフォルトの名無しさん2020/11/23(月) 08:50:42.89ID:eEk7O1Jq
>>966
500並列処理でもしてるんか?
そりゃ普通のCPUじゃ無理だろうよw
制限でもしろ

0968デフォルトの名無しさん2020/11/23(月) 10:20:31.35ID:QFnswc7I
>>966
シェルの問題なんだろうか…?

0969デフォルトの名無しさん2020/11/23(月) 11:57:26.98ID:fPgs5Hol
10万行のループ処理にかかる時間は、while は5秒、for は9分。
それらを、awk, perl に書き直せば、0.1秒

forの時間のほとんどは、プロセスの起動・終了処理。
そもそも、bash はループ処理に向いていないので、dash を使う。
それでも、シェルスクリプトはループ処理に向いていない

awk, perl, Ruby などは、1プロセス内で処理するから、
シェルスクリプトよりも断然速い

0970デフォルトの名無しさん2020/11/23(月) 12:55:10.05ID:eEk7O1Jq
古いCorei7だけどbashで0.5秒で終わるぞ?

$ time -p bash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.53
user 0.51
sys 0.00

dashなら0.15秒だな
$ time -p dash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.15
user 0.14
sys 0.01

0971デフォルトの名無しさん2020/11/23(月) 12:58:14.53ID:eEk7O1Jq
> forの時間のほとんどは、プロセスの起動・終了処理。

forでプロセス起動なんてしないけど?

0972デフォルトの名無しさん2020/11/23(月) 13:16:27.49ID:LSu3Ppxv
>>968
どう見てもそういうシェルスクリプトを書いたとしか見えんな
バックグランドプロセスを自分で管理するのがめんどくさいとかだったら、なんか上の方のレスであったな

0973デフォルトの名無しさん2020/11/23(月) 13:22:54.01ID:LSu3Ppxv
GNU Parallel か

>>966
GNU Parallel で簡単に解決できそ

09749692020/11/23(月) 13:37:45.01ID:fPgs5Hol
>>970
漏れは、6年前のパソコン工房の初心者向けノートPC、
Windows 10 Home, 64 bit, 20H2(2020 秋)
WSL2, Ubuntu 18.04

CPU は、i3-3120M。2 core, 4 thread のエコモード。
8GB メモリで、

bash
real 1.53
user 1.53
sys 0.00

dash
real 0.42
user 0.42
sys 0.00

09759682020/11/23(月) 14:12:23.68ID:QFnswc7I
>>970
$ time -p bash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.30
user 0.30
sys 0.00
$ time -p dash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0.11
user 0.11
sys 0.00

OS: Gentoo via WSL2 on Windows 10 (build 20262.1010)
CPU: AMD Ryzen 7 3700X
RAM: 16 GiB, 2666 MHz

09769682020/11/23(月) 14:12:52.26ID:QFnswc7I
多分ね,遅いのはシェルのせいじゃない。
組み方がおかしい。

0977デフォルトの名無しさん2020/11/23(月) 16:34:44.84ID:iaIJT3SX
テキストファイルの中にカレントディレクトリを基準にしたファイルリストがあります。
このテキストファイルのファイルリストのファイルを~/backap/以下にディレクトリ構造を
維持したままコピーする方法を教えてください。

ファイルリストに含まれるパスは全てファイルです。ディレクトリで終わるパスは含まれません。

./file/jidori.jpg
./nikki/2020/11/01.txt
↑こんな感じのがたくさんあります

0978デフォルトの名無しさん2020/11/23(月) 17:18:30.33ID:nsFhHMUZ
$ rsync -a ―files-from=./file_list.txt . ~/backap

0979デフォルトの名無しさん2020/11/23(月) 18:16:32.54ID:hekS2Nxq
$ cp -pr ./* ~/backup

ではいかんのか?

0980デフォルトの名無しさん2020/11/23(月) 20:09:16.39ID:QFnswc7I
ちなみにbackapじゃなくてbackupな

0981デフォルトの名無しさん2020/11/23(月) 20:59:12.22ID:bsUMpvvq
>>979
あほ?

0982デフォルトの名無しさん2020/11/24(火) 07:52:34.13ID:4nyZROoo
rsync -avをよく使う

09839772020/11/24(火) 18:17:20.50ID:xCsiFrs4
大変助かりました!ありがとうございます!!

0984デフォルトの名無しさん2020/11/24(火) 20:21:52.33ID:mbTiTj6s
次スレそろそろ……

0985デフォルトの名無しさん2020/11/24(火) 21:38:15.89ID:mbTiTj6s
言い出しっぺなんで建てました。
https://mevius.5ch.net/test/read.cgi/tech/1606221440

0986デフォルトの名無しさん2020/11/24(火) 23:19:57.68ID:EBaS3Lgi
しっぺ
デコピン
馬場チョップ

0987デフォルトの名無しさん2020/11/25(水) 00:18:39.96ID:jf5n46hh
しっぷ
デブちょん
バカちょんぷ

0988デフォルトの名無しさん2020/12/10(木) 10:37:09.61ID:/AM+Meb9
(´・ω・`)

0989デフォルトの名無しさん2020/12/10(木) 14:19:01.84ID:/AM+Meb9
(´・ω・`)

0990デフォルトの名無しさん2020/12/11(金) 08:55:47.30ID:8Z169BTH
うめ!!!

0991デフォルトの名無しさん2020/12/11(金) 08:55:56.82ID:8Z169BTH
うめっ11

0992デフォルトの名無しさん2020/12/11(金) 08:56:03.69ID:8Z169BTH
うめあ

0993デフォルトの名無しさん2020/12/11(金) 08:56:11.79ID:8Z169BTH
うめい

0994デフォルトの名無しさん2020/12/11(金) 08:56:19.82ID:8Z169BTH
うめうえ

0995デフォルトの名無しさん2020/12/11(金) 08:56:26.45ID:8Z169BTH
うめえ

0996デフォルトの名無しさん2020/12/11(金) 08:56:36.33ID:8Z169BTH
うめめt

0997デフォルトの名無しさん2020/12/11(金) 08:56:45.14ID:8Z169BTH
ume

0998デフォルトの名無しさん2020/12/11(金) 08:56:52.52ID:8Z169BTH
umeru

0999デフォルトの名無しさん2020/12/11(金) 08:57:00.61ID:8Z169BTH
uue

1000デフォルトの名無しさん2020/12/11(金) 08:57:08.73ID:8Z169BTH
ume

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 111日 17時間 39分 13秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。