シェルスクリプトに関する総合スレッドです。
全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。
シェルスクリプト総合 その33
https://mevius.5ch.net/test/read.cgi/tech/1584893550/
探検
シェルスクリプト総合 その34
レス数が1000を超えています。これ以上書き込みはできません。
2020/08/21(金) 15:17:55.64ID:mArnj/tT
939デフォルトの名無しさん
2020/11/17(火) 19:02:58.91ID:J3+TnR7G ファイル履歴「せやな…」
940デフォルトの名無しさん
2020/11/17(火) 20:36:01.00ID:RPD3bx3d wslpathがcygpathと同じ仕組みなのってなんで分かったん?
いや,つっかかる訳じゃなくて,
wslpathってソース公開されてないからさ。
いや,つっかかる訳じゃなくて,
wslpathってソース公開されてないからさ。
941デフォルトの名無しさん
2020/11/17(火) 20:46:02.57ID:/MJ+K6rY a.txt
a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c z Nov 19 2020 ccc
cat a.txt | awk -v hy="-" '{if("$2"=="x"){"date -d "$3hy$4hy$5" ¥"+%Y-%M-%D¥" | getline var ; print $1","var","$6}}'
これ実行するとvarの内容がたまに前の行の値のままになったりするんだけど
|が悪いの?
結局 while IFS=' ' read 〜に変えたらやりたいことはできたけと何故上手くいかなかったのか分からなくて
a x Nov 17 2020 aaa
b x Nov 18 2020 bbb
c z Nov 19 2020 ccc
cat a.txt | awk -v hy="-" '{if("$2"=="x"){"date -d "$3hy$4hy$5" ¥"+%Y-%M-%D¥" | getline var ; print $1","var","$6}}'
これ実行するとvarの内容がたまに前の行の値のままになったりするんだけど
|が悪いの?
結局 while IFS=' ' read 〜に変えたらやりたいことはできたけと何故上手くいかなかったのか分からなくて
942デフォルトの名無しさん
2020/11/17(火) 21:02:17.75ID:8pwQehN5 >>940
コロンとかのファイル名の話な(これはwslpathやcygpathとは関係ない)
cygwin「cygwin環境でHOME以下に作ったファイルはC:\cygwin64\home以下に作るで」
cygwin「 cygwin環境で : とか * という名前のファイル作れるで」
10年前の俺「え?なんで?エクスプローラーから見たら文字化けしとるやんけwww なんだこりゃ」
数分後 → 「ふーん」
WSL「/mnt/c/Users以下に作ったファイルはC:\Users以下に作るで」
WSL「WSL環境で : とか * という名前のファイル作れるで」
俺「エクスプローラーから見たら文字化けしとるやんけwww 既視感ぱねぇwww」
数分後 → 「同じじゃねーかwww」
wslpathは別にcygpath使ってればコマンド名とかオプションとか真似してるってわかるだろ?
WSL(Linux)にパスを変換するときのオプションが何故か-uな所とか
(cygwinでは-uの長いオプション名は--unix)
コロンとかのファイル名の話な(これはwslpathやcygpathとは関係ない)
cygwin「cygwin環境でHOME以下に作ったファイルはC:\cygwin64\home以下に作るで」
cygwin「 cygwin環境で : とか * という名前のファイル作れるで」
10年前の俺「え?なんで?エクスプローラーから見たら文字化けしとるやんけwww なんだこりゃ」
数分後 → 「ふーん」
WSL「/mnt/c/Users以下に作ったファイルはC:\Users以下に作るで」
WSL「WSL環境で : とか * という名前のファイル作れるで」
俺「エクスプローラーから見たら文字化けしとるやんけwww 既視感ぱねぇwww」
数分後 → 「同じじゃねーかwww」
wslpathは別にcygpath使ってればコマンド名とかオプションとか真似してるってわかるだろ?
WSL(Linux)にパスを変換するときのオプションが何故か-uな所とか
(cygwinでは-uの長いオプション名は--unix)
943デフォルトの名無しさん
2020/11/17(火) 21:04:26.43ID:8pwQehN5 まあもしかしたらcygwinよりも前にSFU(の前身)とかがやってたのかもしれんけどさ
944デフォルトの名無しさん
2020/11/17(火) 21:32:09.28ID:yKNV/xx9 >>940
「仕組み」は、具体的な実装のことではなく、全体的なやりかたのことやろ。
「仕組み」は、具体的な実装のことではなく、全体的なやりかたのことやろ。
945デフォルトの名無しさん
2020/11/17(火) 22:11:55.77ID:8pwQehN5 > 俺「エクスプローラーから見たら文字化けしとるやんけwww 既視感ぱねぇwww」
> 数分後 → 「同じじゃねーかwww」
この同じじゃねーかwwwっていうのは : などのWindowsでは使えない文字のマッピング先の文字コードの話ね
そういや文字コードが同じであることは確かめたけど、実際にcygwinで作ったファイルをWSLで見たことなかったわ
んで、今やってみたけど、当然なんだけど、cygwinで作った : というファイルはWSLでちゃんと : になってたw
cygwin(たぶんmsysも同じ)との相互運用も考えてこうしたんだろうな
> 数分後 → 「同じじゃねーかwww」
この同じじゃねーかwwwっていうのは : などのWindowsでは使えない文字のマッピング先の文字コードの話ね
そういや文字コードが同じであることは確かめたけど、実際にcygwinで作ったファイルをWSLで見たことなかったわ
んで、今やってみたけど、当然なんだけど、cygwinで作った : というファイルはWSLでちゃんと : になってたw
cygwin(たぶんmsysも同じ)との相互運用も考えてこうしたんだろうな
946デフォルトの名無しさん
2020/11/18(水) 14:43:02.92ID:oGkGNlvA947946
2020/11/18(水) 14:47:49.14ID:oGkGNlvA948946
2020/11/18(水) 14:58:29.15ID:oGkGNlvA >>941
Ruby で、CSV なら、
require 'csv'
CSV.foreach( "a.csv", col_sep: " " ) do |row| # 1行ずつ処理する
p row[ 1 ]
end
出力
"x"
"x"
"z"
Ruby で、CSV なら、
require 'csv'
CSV.foreach( "a.csv", col_sep: " " ) do |row| # 1行ずつ処理する
p row[ 1 ]
end
出力
"x"
"x"
"z"
949デフォルトの名無しさん
2020/11/18(水) 15:28:33.58ID:XsHXPiSN951デフォルトの名無しさん
2020/11/18(水) 15:59:00.88ID:XsHXPiSN >>950
出力される行数10行くらいに増やした場合は?(もちろん全て日付変えて)
出力される行数10行くらいに増やした場合は?(もちろん全て日付変えて)
952946
2020/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
実際には、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
953デフォルトの名無しさん
2020/11/18(水) 17:46:13.72ID:XsHXPiSN954デフォルトの名無しさん
2020/11/18(水) 22:39:32.53ID:c4VI5UKm フィールド数が想定がところがあるとエラーで getline が呼ばれなくて
var がそのままになったりするのかも?
var がそのままになったりするのかも?
955デフォルトの名無しさん
2020/11/18(水) 22:40:20.82ID:c4VI5UKm 想定が -> 想定外な
956デフォルトの名無しさん
2020/11/18(水) 23:00:38.15ID:XsHXPiSN957デフォルトの名無しさん
2020/11/18(水) 23:22:35.65ID:2l0B+GoX AWKのgetlineってめっちゃ便利よね。
これ使い始めたらもうシェルスクリプトじゃなくてAWKスクリプトになるけどw
これ使い始めたらもうシェルスクリプトじゃなくてAWKスクリプトになるけどw
958デフォルトの名無しさん
2020/11/18(水) 23:25:59.76ID:XsHXPiSN959デフォルトの名無しさん
2020/11/19(木) 02:55:11.75ID:kL0AGIHT まず再現するデータをよこせ
960デフォルトの名無しさん
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。
なんかデータをちょっといじると再現しなくなるような感もある。
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。
なんかデータをちょっといじると再現しなくなるような感もある。
961946
2020/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
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
962デフォルトの名無しさん
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
そう。わざと壊れたデータで遊んでみている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
963デフォルトの名無しさん
2020/11/19(木) 21:49:05.89ID:pLwLwTYy ちなみにdateコマンドは日付が空だと今日の日付を入れるようなので
Nov 20になる前に試すのがおすすめw
Nov 20になる前に試すのがおすすめw
964946
2020/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
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
965デフォルトの名無しさん
2020/11/20(金) 14:19:37.94ID:EGUOn9wt966デフォルトの名無しさん
2020/11/23(月) 08:04:11.39ID:bkMAXdue ループ処理をバックグラウンドで流すと500個ぐらいプロセスができて
まったく動かない。いい方法ないかな。
まったく動かない。いい方法ないかな。
967デフォルトの名無しさん
2020/11/23(月) 08:50:42.89ID:eEk7O1Jq968デフォルトの名無しさん
2020/11/23(月) 10:20:31.35ID:QFnswc7I >>966
シェルの問題なんだろうか…?
シェルの問題なんだろうか…?
969デフォルトの名無しさん
2020/11/23(月) 11:57:26.98ID:fPgs5Hol 10万行のループ処理にかかる時間は、while は5秒、for は9分。
それらを、awk, perl に書き直せば、0.1秒
forの時間のほとんどは、プロセスの起動・終了処理。
そもそも、bash はループ処理に向いていないので、dash を使う。
それでも、シェルスクリプトはループ処理に向いていない
awk, perl, Ruby などは、1プロセス内で処理するから、
シェルスクリプトよりも断然速い
それらを、awk, perl に書き直せば、0.1秒
forの時間のほとんどは、プロセスの起動・終了処理。
そもそも、bash はループ処理に向いていないので、dash を使う。
それでも、シェルスクリプトはループ処理に向いていない
awk, perl, Ruby などは、1プロセス内で処理するから、
シェルスクリプトよりも断然速い
970デフォルトの名無しさん
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
$ 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
971デフォルトの名無しさん
2020/11/23(月) 12:58:14.53ID:eEk7O1Jq > forの時間のほとんどは、プロセスの起動・終了処理。
forでプロセス起動なんてしないけど?
forでプロセス起動なんてしないけど?
972デフォルトの名無しさん
2020/11/23(月) 13:16:27.49ID:LSu3Ppxv973デフォルトの名無しさん
2020/11/23(月) 13:22:54.01ID:LSu3Ppxv974969
2020/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
漏れは、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
975968
2020/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
$ 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
976968
2020/11/23(月) 14:12:52.26ID:QFnswc7I 多分ね,遅いのはシェルのせいじゃない。
組み方がおかしい。
組み方がおかしい。
977デフォルトの名無しさん
2020/11/23(月) 16:34:44.84ID:iaIJT3SX テキストファイルの中にカレントディレクトリを基準にしたファイルリストがあります。
このテキストファイルのファイルリストのファイルを~/backap/以下にディレクトリ構造を
維持したままコピーする方法を教えてください。
ファイルリストに含まれるパスは全てファイルです。ディレクトリで終わるパスは含まれません。
./file/jidori.jpg
./nikki/2020/11/01.txt
↑こんな感じのがたくさんあります
このテキストファイルのファイルリストのファイルを~/backap/以下にディレクトリ構造を
維持したままコピーする方法を教えてください。
ファイルリストに含まれるパスは全てファイルです。ディレクトリで終わるパスは含まれません。
./file/jidori.jpg
./nikki/2020/11/01.txt
↑こんな感じのがたくさんあります
978デフォルトの名無しさん
2020/11/23(月) 17:18:30.33ID:nsFhHMUZ $ rsync -a ―files-from=./file_list.txt . ~/backap
979デフォルトの名無しさん
2020/11/23(月) 18:16:32.54ID:hekS2Nxq $ cp -pr ./* ~/backup
ではいかんのか?
ではいかんのか?
980デフォルトの名無しさん
2020/11/23(月) 20:09:16.39ID:QFnswc7I ちなみにbackapじゃなくてbackupな
981デフォルトの名無しさん
2020/11/23(月) 20:59:12.22ID:bsUMpvvq >>979
あほ?
あほ?
982デフォルトの名無しさん
2020/11/24(火) 07:52:34.13ID:4nyZROoo rsync -avをよく使う
983977
2020/11/24(火) 18:17:20.50ID:xCsiFrs4 大変助かりました!ありがとうございます!!
984デフォルトの名無しさん
2020/11/24(火) 20:21:52.33ID:mbTiTj6s 次スレそろそろ……
985デフォルトの名無しさん
2020/11/24(火) 21:38:15.89ID:mbTiTj6s 言い出しっぺなんで建てました。
https://mevius.5ch.net/test/read.cgi/tech/1606221440
https://mevius.5ch.net/test/read.cgi/tech/1606221440
986デフォルトの名無しさん
2020/11/24(火) 23:19:57.68ID:EBaS3Lgi しっぺ
デコピン
馬場チョップ
デコピン
馬場チョップ
987デフォルトの名無しさん
2020/11/25(水) 00:18:39.96ID:jf5n46hh しっぷ
デブちょん
バカちょんぷ
デブちょん
バカちょんぷ
988デフォルトの名無しさん
2020/12/10(木) 10:37:09.61ID:/AM+Meb9 (´・ω・`)
989デフォルトの名無しさん
2020/12/10(木) 14:19:01.84ID:/AM+Meb9 (´・ω・`)
990デフォルトの名無しさん
2020/12/11(金) 08:55:47.30ID:8Z169BTH うめ!!!
991デフォルトの名無しさん
2020/12/11(金) 08:55:56.82ID:8Z169BTH うめっ11
992デフォルトの名無しさん
2020/12/11(金) 08:56:03.69ID:8Z169BTH うめあ
993デフォルトの名無しさん
2020/12/11(金) 08:56:11.79ID:8Z169BTH うめい
994デフォルトの名無しさん
2020/12/11(金) 08:56:19.82ID:8Z169BTH うめうえ
995デフォルトの名無しさん
2020/12/11(金) 08:56:26.45ID:8Z169BTH うめえ
996デフォルトの名無しさん
2020/12/11(金) 08:56:36.33ID:8Z169BTH うめめt
997デフォルトの名無しさん
2020/12/11(金) 08:56:45.14ID:8Z169BTH ume
998デフォルトの名無しさん
2020/12/11(金) 08:56:52.52ID:8Z169BTH umeru
999デフォルトの名無しさん
2020/12/11(金) 08:57:00.61ID:8Z169BTH uue
1000デフォルトの名無しさん
2020/12/11(金) 08:57:08.73ID:8Z169BTH ume
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 111日 17時間 39分 13秒
新しいスレッドを立ててください。
life time: 111日 17時間 39分 13秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【調査】クレジットカード、1人何枚持つのが「平均的」? [ひぃぃ★]
- 高市内閣、支持率横ばい75% (日経・テレ東 世論調査) [少考さん★]
- 「『ETC』←なんて読んでますか?」 公募で決めたのに全然呼ばれなかった“幻の愛称”とは [七波羅探題★]
- 首都圏の通勤ラッシュがどんどんひどくなっている JR埼京線は混雑率163%!コロナ前に戻ったわけ [首都圏の虎★]
- 宮崎あおい「電子レンジ持ってない」“丁寧な暮らし”を告白「ごはんを温め直すときも蒸し器」に「凄すぎ」の声 [muffin★]
- 【競馬】ジャパンカップ カランダガンが優勝! [久太郎★]
- 【悲報】日本人、今度はこの時期に中国でパフォーマンスする歌手を「売国奴」として叩く時代に突入… 時に身を任せるだけ [452836546]
- 【高市 終了】 フランス ドイツ イギリス「やっぱり中国とは仲良くしなくちゃね🤗」 首脳が続々と中国を訪問へ…… [485983549]
- 【実況】博衣こよりのえちえちゼルダの伝説 ムジュラの仮面🧪★9
- ガチのマジでニート経験ある奴にしか分からないこと [977261419]
- コメ卸大手社長「5kg3500円にすべきだ。JAや小売店に協力を要請して値下げを目指す。コメ離れが進めば、産業全体が立ちゆかなくなる」 [256556981]
- 【悲報】ネトウヨ、ビジウヨの偽動画に騙されまくって思想を操作されるも全く気づかず今日もイイネ!を付ける。なぜ日本人はこんな馬鹿に [219241683]
