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

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
垢版 |
2018/07/24(火) 11:01:16.36ID:r0TJj2hB
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。

前スレ: シェルスクリプト総合 その27(https://mevius.5ch.net/test/read.cgi/unix/1525337663/
2018/09/21(金) 02:43:02.52ID:v8LFlyn0
>>950
タブはともかく改行は無理
Excel使ってると改行は絶対入れる
2018/09/21(金) 02:43:36.28ID:v8LFlyn0
>>950
> Linux・Windows 間で、テキスト転送しても、改行コードが変わるから、ヤバイ
バイナリ扱いすればいいだけ
954デフォルトの名無しさん
垢版 |
2018/09/21(金) 04:04:34.44ID:m7KC0L1Z
>>951
拡張子を txt にしてから開いてウィザード動かすか、または 0 で始まる数字だけの文字列は ="0123" のようにして最初から作っておくとうまく行く。
2018/09/21(金) 04:48:00.63ID:dtC8HZuo
ちょっと荒れたのであまり話題にはしたくないものの
Unicodeの区切り文字を使うのはいい手段だと思う。
ただし思い切り独自規格なので既存の製品には対応できないけどね。もちろん
2018/09/21(金) 05:30:02.46ID:v8LFlyn0
RS、USってのはUnicodeじゃなくてASCIIの制御文字だよ
2018/09/21(金) 05:37:53.78ID:v8LFlyn0
もちろんUnicodeでも使えるけどね
2018/09/21(金) 06:06:23.57ID:v8LFlyn0
一般人はCSVファイルをExcelで編集する
となると別にテキスト形式ベースじゃなくても良いわけだ
だとすると誰がCSVファイルを望んでいるのだろうか?
おそらくプログラマなんだろうね。

考えてみればテーブル型データに限っていれば
CSVはJSONよりも効率よくデータを記述できる
JSONだったらこんな感じだしね

[
{"field1": 1, "field2": 2, "field3": 3},
{"field1": 1, "field2": 2, "field3": 3},
]

これがCSVだとここまでコンパクトに纏められる

field1,field2,field3
1,2,3
1,2,3

一般人のことを考えないくていいという前提のものと、もっと良い形式が考えてみよう
それもシェルスクリプトで扱うのが容易な形式

一行ずつ読み取るのだから、一データの終わりはLFであるべきだろう
そしてデータの中には改行は含まず、カンマや制御コードはprintfコマンドで
簡単に解釈ができるよう8進数にエスケープを行う。どうかね?
エスケープの処理を除けば既存のツールでも扱えるだろう

ただ問題があるとすれば、printfで変数に代入する時forkを行う必要があるということだな
これだと時間がかかってしまう。かといって1文字ずつパースするのも時間がかかる

一行ずつ処理するのが可能で、1カラムずつ処理するのも可能で処理に時間がかからない方法はないだろうか
959950
垢版 |
2018/09/21(金) 07:09:48.97ID:m8DL5ZJ4
>>931
>Excelデータの中の改行はLF。(一行の最後はCRLF)

もし、このCSV を、Linux で扱う場合には、やばくない?
行区切りをCRLF に設定すれば、データ中に、LF があっても問題ないのかな?
2018/09/21(金) 08:12:42.97ID:LR4lwFnG
>>959
別にLinuxでも行区切りがCRLFで行内の改行がLFのアプリは作れるでしょ
標準のアプリと動作が違うけどそういう特殊フォーマットだと思えばいいだけ
961デフォルトの名無しさん
垢版 |
2018/09/21(金) 09:34:09.19ID:7bTZc31z
>>958
fork?どういう処理を想定してるのか?
2018/09/21(金) 09:47:27.07ID:NXw3/PDJ
みんなで輪になって踊る処理やろ
963デフォルトの名無しさん
垢版 |
2018/09/21(金) 09:56:30.62ID:7bTZc31z
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'
2018/09/21(金) 10:10:07.17ID:v8LFlyn0
>>961
a=$(printf 'test')

ビルトインコマンドであってもforkが行われる
2018/09/21(金) 10:49:46.73ID:v8LFlyn0
なんか次から次へと変なテクニックが編み出されていくw
2018/09/21(金) 12:41:08.14ID:FeY49FdE
構内放送「直ちに中庭に集合してください」
従業員 (また誰かforkコマンド実行したな…)
2018/09/21(金) 12:48:09.10ID:v8LFlyn0
>>960
> 別にLinuxでも行区切りがCRLFで行内の改行がLFのアプリは作れるでしょ

よく考えたら、シェルスクリプトでもそれなりに使いやすいかもしれない。
readで1行(LFがくるまで)読んで、読み込んだ最後がCRだったら行区切りあつかい
そうでなければ同一行としてあつかえば良いわけだし
968デフォルトの名無しさん
垢版 |
2018/09/21(金) 12:50:18.79ID:isbUNhMl
8進数エスケープってbashの機能で文字に直せなかったっけ?
2018/09/21(金) 12:53:33.36ID:v8LFlyn0
printf以外でってこと?
2018/09/21(金) 12:56:03.96ID:dtC8HZuo
たとえばエスケープをするのは
US,RS,エスケープ文字自体
↑これでどうだろうか各種エスケープは
\#,\%,\\
これ。

ちなみにあたり前だが 端末の画面に「分かりやすく」表示するときは
\#→水平タブ,\%→改行(LF)
に置換するのがいいだろう。
2018/09/21(金) 12:57:07.23ID:dtC8HZuo
>>968
echo $'\030'
↑こういう感じやね。
2018/09/21(金) 13:28:31.46ID:v8LFlyn0
>>971
あー、dashで使えないから頭から抜け落ちてたわw
2018/09/21(金) 18:20:35.40ID:dtC8HZuo
>>970
これはだめだ。
\<US> \<RS> \\
↑これで十分だった。
2018/09/21(金) 20:25:16.42ID:FeY49FdE
思いつきだけど、エスケープ文字自体を表すときは別の文字をエスケープして表現するほうが何かと都合がよくないか?
2018/09/21(金) 21:30:40.16ID:dtC8HZuo
>>974
くわしく。
具体例でたのむわ(アホで申し訳ない)
2018/09/21(金) 23:27:59.03ID:/eJt2TVD
例えば\rsを検索したいときに、\が\\でなければ\rsを検索するだけでよいけど、\が\\のときは見つけたあとに\の数をたどってそれが本当に\rsなのか調べないといけない、とか、
とある場所までシークしたときに、その場所の文字が何なのか、\を繰り返し数えないといけない、とか、
\?はすぐエラーとわかるとか。
977デフォルトの名無しさん
垢版 |
2018/09/22(土) 00:50:25.74ID:9bcvhAfJ
>>974
その別のエスケープ文字をエスケープするには
どうすればいいの?
2018/09/22(土) 01:10:24.01ID:Whfp6XnZ
>>977
エスケープ文字はあくまで\だけ。
例えば%を使うとして、
rsを表すなら\rs、
usを表すなら\us、
\を表すなら\%、
%を表すなら%、
と記す。とかね
2018/09/22(土) 03:37:20.07ID:LHC7cNdc
>>978
よくわからん。そのルールだと

\rsを表すときは、\%rs
\usを表す時は、\%us
\%を表す時は、\%%
%を表す時は、%
ってことか?

%を検索した時、それが本当の%であるかは
一文字前が\であるかどうかを調べないといけなくて、
\rsを検索したい時は、\%rsで検索しないといけないってことか?
2018/09/22(土) 04:10:01.34ID:wyOkhzEz
>>979
あってるよ。

\が\\の場合は、
\を検索するときは\\を見つけるだけじゃ不十分だけど、
\が\%の場合は、
%を検索するときは一文字前が\でない%を見つけるだけで十分だし、
\を検索するときも\%を見つけるだけで十分なんだ。

同様に、
\が\\の場合は、
\rsを検索するときは\\rsを見つけるだけじゃ不十分だけど、
\が\%の場合は、
\rsを検索するときは\%rsを見つけるだけで十分になる。
2018/09/22(土) 06:13:58.91ID:dKJ+Zat7
どうせRS,USとかの非文字を使うんなら
エスケープ文字もESCでいいんじゃないだろうか。
2018/09/22(土) 06:46:52.90ID:LHC7cNdc
bashでさ、typesetで関数の中身を出力できるじゃん?
それをevalで評価したら同じ関数が出来上がるじゃん?
これってどれくらい信用できるんだろう?

作成した関数のコードそのままの形で出力されるなら
evalで評価して同じものができるだろうけど、
ぱっとみtypesetで出力するされたものをみると、
改行の位置とか変わって整形された状態になって
関数にはfunctionが頭に追加されてる。

元のコードをどれくらい書き換えるんだろうか?
これ以外になにか変わる事知ってたりする人いない?
2018/09/22(土) 11:47:57.86ID:rfhCLeCr
次スレたてるわ
2018/09/22(土) 11:56:38.68ID:rfhCLeCr
次スレ
ワッチョイつけたぞ

シェルスクリプト総合 その29
http://mevius.5ch.net/test/read.cgi/tech/1537584801/
2018/09/22(土) 12:03:50.02ID:rfhCLeCr
今まで人気ないスレだったから全く不要だったわけだが、今後は次スレ立てる安価指定しといたほうがいいか
次回の勢い次第でテンプレ編集で
2018/09/22(土) 21:25:51.74ID:SEEeyc/q
埋めろって言っても反発されて埋まらん気もするし自分でやるわ
2018/09/22(土) 21:26:12.71ID:SEEeyc/q
埋め
2018/09/22(土) 21:26:36.85ID:SEEeyc/q
埋め
2018/09/22(土) 21:26:59.15ID:SEEeyc/q
埋め
2018/09/22(土) 21:27:22.40ID:SEEeyc/q
埋め
2018/09/22(土) 21:27:46.75ID:SEEeyc/q
埋め
2018/09/22(土) 21:27:56.78ID:wyOkhzEz
埋めない!
993デフォルトの名無しさん
垢版 |
2018/09/22(土) 21:27:56.90ID:PGp2AKzL
荒らすなよハゲ
2018/09/22(土) 21:28:09.05ID:SEEeyc/q
埋め
995デフォルトの名無しさん
垢版 |
2018/09/22(土) 21:28:36.50ID:PGp2AKzL
ID:SEEeyc/q ← アラシ
2018/09/22(土) 21:28:55.88ID:SEEeyc/q
埋めも理解できない阿呆がいるのか…
2018/09/22(土) 21:30:18.74ID:SEEeyc/q
このスレも埋まらんうちにすでにCSV荒らしと半角荒らしが次スレ移動してるからな
前スレ使え言っても子供が言うこと聞くわけないから自分でやることにしただけよ
2018/09/22(土) 21:31:28.53ID:wyOkhzEz
梅屋敷!
2018/09/22(土) 21:31:44.51ID:SEEeyc/q
埋め
2018/09/22(土) 21:32:32.82ID:SEEeyc/q
終わり。質問はなし
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 60日 10時間 31分 16秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。