UNIXプログラミング質問すれ Part10
1 :unco ◆manko/yek. :2011/04/18(月) 17:06:36.77 .net UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド 前スレ Part9 http://hibari.2ch.net/test/read.cgi/tech/1205795434/ Part8 http://pc11.2ch.net/test/read.cgi/tech/1147946176/ Part7 http://pc8.2ch.net/test/read.cgi/tech/1127373405/ Part6 http://pc8.2ch.net/test/read.cgi/tech/1116908090/ Part5 http://pc8.2ch.net/test/read.cgi/tech/1105723117/ Part4 http://pc5.2ch.net/test/read.cgi/tech/1095843584/ Part3 http://pc5.2ch.net/test/read.cgi/tech/1085930894/ Part2 http://pc5.2ch.net/test/read.cgi/tech/1055110889/ Part1 http://pc2.2ch.net/tech/kako/992/992057422.html Part3のミラー http://makimo.to/2ch/pc5_tech/1085/1085930894.html Part2のミラー http://makimo.to/2ch/pc5_tech/1055/1055110889.html
895 :デフォルトの名無しさん :2018/04/12(木) 11:16:25.66 ID:BGK1pm+1.net >>894 最初の引数は $1 で渡されるので ${1:offset:length} のようにすると部分文字列を切り出せる。 例えば ${1:0:4} なら先頭の年の4桁になる。
896 :デフォルトの名無しさん :2018/04/12(木) 13:03:59.46 ID:Zzp9N4Tt.net >>895 ありがとうございます。 要件通り動作しました!
897 :デフォルトの名無しさん :2018/05/12(土) 10:59:02.49 ID:pDgCeBjY.net 共同ツール 1 https://seleck.cc/685 https://trello.com/ ボードのメニュー → Power-Upsから拡張可能 Slack DropBoxなど Trello Chrome拡張機能 elegant ttp://www.kikakulabo.com/service-eft/ trelloのオープンソースあり 共同ツール 2 https://www.google.com/intl/ja_jp/sheets/about/ 共同ツール 3 https://slack.com/intl/ja-jp https://www.dropbox.com/ja/ https://bitbucket.org/ https://ja.atlassian.com/software/sourcetree https://sketchapp.com/extensions/plugins/ ttp://photoshopvip.net/103903 ttps://goodpatch.com/blog/sketch-plugins/
898 :デフォルトの名無しさん :2018/05/23(水) 19:51:27.67 ID:Au5e7VGg.net 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 ILEYF
899 :デフォルトの名無しさん :2018/07/05(木) 01:44:54.61 ID:RfoszcD2.net 9B4
900 :デフォルトの名無しさん :2018/07/05(木) 03:16:26.29 ID:8UhFPcQc.net 茨城県民死ねよ
901 :デフォルトの名無しさん :2018/07/05(木) 03:19:12.08 ID:Mlujh05Y.net おいクソ荒らし 板荒らすのやめろやボケ
902 :デフォルトの名無しさん :2018/07/05(木) 11:50:50.65 ID:IcGtf/nv.net IPのひとつはこれかな 364 デフォルトの名無しさん 2018/07/04(水) 21:56:02.05SLIP:ワッチョイ f5fa-2e90 [114.149.223.252](1)ID:gFgZc5FG0(1) BDR
903 :デフォルトの名無しさん :2018/07/05(木) 12:20:05.04 ID:bmsMRAhD.net 前科あったのかこのIP 164 デフォルトの名無しさん sage 2018/05/25(金) 13:21:39.62ID:slKDy5Ac(1) 114.149.223.252
904 :デフォルトの名無しさん :2018/07/05(木) 13:59:50.38 ID:LwyvWF7X.net https://www.iphiroba.jp/ip.php?mode=ranking&ip=114.149.223.252&token=ccdb774c4b7c209c37ca08253144114b 茨城かな?
905 :デフォルトの名無しさん :2018/07/05(木) 15:11:55.88 ID:DWuZ9zG7.net >>904 そのページの114.149.223.252の位置情報で表示される地図で 静岡県三島市の株式会社Geolocation Technologyにピンが立ってる
906 :デフォルトの名無しさん :2018/08/20(月) 16:43:07.23 ID:aLr4GPAX.net 構造のあるテキストの部分だけを加工するにはどうすれば… $ cat before * Fruit apple banana orange banana * Animal dog cat penguin $ cat expect * Fruit apple banana orange * Animal cat dog penguin
907 :906 :2018/08/20(月) 16:43:38.67 ID:aLr4GPAX.net sed の write file をプロセス置換と組み合わせればいけるかと思ったがそんなことはなかった $ cat before | sed -n -e '/^*/,/^$/{/^*/p;/^*/d;}' -e 'w '>(sort -u) * Fruits * Animal apple banana cat dog orange penguin
908 :デフォルトの名無しさん :2018/08/20(月) 17:01:47.21 ID:h5lNG6L+.net $ cat before * Fruit apple banana orange banana * Animal dog cat banana penguin apple $ cat expect * Fruit apple banana orange * Animal cat dog penguin でもいいのか?
909 :906 :2018/08/20(月) 18:56:15.99 ID:aLr4GPAX.net >>908 いえ、そこまで難しいケースはまだ考えてなくて、各項目の内容をそれぞれソートしたいだけです。 ソートはできれば外部コマンド sort -u などに渡して行いたい。加工方法をコマンドとして取り替えられるようにしたいので。 例えば tr '[a-z]' '[A-Z]' に換えて * Fruits APPLE のようにできると嬉しいです。
910 :デフォルトの名無しさん :2018/08/20(月) 21:54:46.90 ID:jUR6uBV4.net 切り出して別コマンドに渡すんだよね。 Perl で行の区切りを '*' にして塊を読んで内容をパイプで渡すみたいにすれば良いのではないだろうか。 しかしこれをしようとすると1行プログラムではきつい。 そういえばこれプログラミングのお題スレに問題として書いとくのはどうかな。 お題としては丁度良さそうだし多分みんなして色んな言語で作ってくれるよ。
911 :906 :2018/08/20(月) 22:17:50.27 ID:aLr4GPAX.net >>910 アドバイスありがとう。 シェルスクリプトはパイプを使って多くのことを圧倒的な短さで出来るし、テキスト処理は最も得意な領域のはず。 しかしこれだけ単純な課題の答えが複雑になってしまうのなら、これは穴なんじゃないか、みんなどうしてるんだろう、と思ったんです。 俺は今月この種のタスクに何度も直面しました。 流れるコンパイルログの一部分だけをハイライトしたかったり、 Makefileのデバッグログのセクションに分かれた情報をファイルや一時変数を介さないで処理したかったり。 egzactのconvなどがシェルスクリプトのデータ生成という穴を埋めたように、この問題が鬼門なら、 解決するコマンドを考えてみたいです。
912 :デフォルトの名無しさん :2018/08/20(月) 22:45:23.64 ID:iMQAgpc+.net >>911 > テキスト処理は最も得意な領域のはず。 それは正しいがシェルは構造を持ったデータをパイプに流せないのでこの手の処理は不得意 PowerShell ならもう少し綺麗にかける
913 :デフォルトの名無しさん :2018/08/21(火) 01:05:48.21 ID:kxzeRRBS.net シェルは、テキスト・文字列で渡す 一方、PowerShell はオブジェクトだから、構造を持てる。 配列・辞書もOK Ruby などがベスト
914 :906 :2018/08/21(火) 03:18:04.26 ID:34Jmks75.net UNIXプログラミングスレで Powershell を勧められるとは思いませんでしたよ。 他言語での解決が興味深いです。お題スレに投稿しました。よろしくどうぞ https://mevius.5ch.net/test/read.cgi/tech/1524570314/#758
915 :デフォルトの名無しさん :2018/08/22(水) 20:52:17.34 ID:PmiUKg2L.net 考えたんだけど、もっと単純なタブ区切りデータ hoo banana bar apple baz orange の二項目名だけをソートして戻す、ということさえシェルスクリプトでは苦悶だ。 戻さないなら cut -f2 | sort でラクなのに。 awesome-cut -f2 <>(sort) のようにできる読み書き可能ファイルを受け取るコマンド awesome-cut と読み書きプロセス置換<>(...) 機能をシェルに加えれば簡単になるかと思ったがダメだ。この方針はスケールしない。 プロセス置換はコマンド行をパーズした時点で名前付きパイプ?になるらしい。 だからネストされたデータを処理するには、フィルタ処理したい分のプロセス置換をあらかじめベタ書きしておかなくちゃならない。 それを避けるためには xargs のように自分でプロセスを起こす、文字列から作るようなコマンドが必要だ。 しかし現行のシェルスクリプトの仕様では、文字列はネストするほどクォーテーションが厳しくなり、使いにくくなる。 解決方法はわからない。シェルスクリプトを諦めるしかないか。 jqコマンドはJSONを扱う。処理の埋め込みも可能。そういうコマンドの中だけで完結させるか。 (お題スレの解答のPerlは美しかった…)
916 :デフォルトの名無しさん :2018/08/22(水) 22:13:37.65 ID:AXf2QKcH.net >>915 フィールド指定出来るソートコマンドを使う
917 :デフォルトの名無しさん :2018/08/22(水) 22:35:15.97 ID:PmiUKg2L.net >>916 サクッと書けそうなのが良いけど、「フィールド指定可能なtrコマンド」みたいに各コマンドに切り出し埋め込み能力が必要になっちゃう
918 :デフォルトの名無しさん :2018/08/22(水) 23:34:08.76 ID:AXf2QKcH.net 何で急にありもしないコマンドを発明してんの?
919 :デフォルトの名無しさん :2018/08/22(水) 23:48:32.88 ID:PmiUKg2L.net >>918 構造のあるテキストデータの一部分だけ外部コマンドで加工して戻したいんですよ。 それに何が必要なのかを考えています。 「タブ区切りデータの第二カラムをソートして戻す」ために >>916 は、そういう機能を持つ外部コマンドを使え(必要なら作れ)、 という意味のアドバイスだと受け取ったのですが違うんですか?
920 :デフォルトの名無しさん :2018/08/23(木) 00:56:37.97 ID:qUZ5eK5Q.net powershell なら、フィールドでソートするのも簡単だけど 「powershell sort 列指定」で検索! PowerShell の Sort-Object Tips http://www.vwnet.jp/windows/PowerShell/2017032901/Sort-Object_Tips.htm
921 :デフォルトの名無しさん :2018/08/23(木) 01:19:50.15 ID:FMBOl46f.net >>920 ほほう… これが Powershell ですか。項目名でソートできるのが強いですね。 ところでお二方に間違って伝わったみたいで… 書き方が不注意でした。 hoo banana bar apple baz orange の第二カラムをソートして戻すとは、 hoo apple bar banana baz orange を得ることです。第一カラムは変わらないことにご注意を。 sort -k 2 などでは行全体を移動してしまいます。 Powershell ではどのようにこれを実現しますか?
922 :デフォルトの名無しさん :2018/08/23(木) 01:26:09.02 ID:lJLY7fZ1.net >>921 cutしてpasteすりゃ済むじゃん 中間ファイルは複数出来るけど
923 :デフォルトの名無しさん :2018/08/23(木) 02:39:41.54 ID:FMBOl46f.net >>922 ありがとう。できました(全然苦悶じゃなかった) all=$(cat); paste <(echo "$all" | cut -f1) <(echo "$all" | cut -f2 | sort) これを応用すれば上の方の縦型の構造もできるかも。 paste の縦バージョンは cat な訳だから…
924 :923 :2018/08/23(木) 03:04:21.42 ID:FMBOl46f.net (たびたびスマン) hcutのようなものは作れるが、でもネストするのにプロセス置換を使っていたら結局 加工プロセスをあらかじめ作らなくちゃならないので >>915 の問題は解決不能のままだわ。
925 :デフォルトの名無しさん :2018/08/23(木) 04:41:50.26 ID:qUZ5eK5Q.net 1列目を、f1 ファイルへ抽出する。 2列目を、f2 ファイルへ抽出する f2 をソートして、f2a ファイルとする f1, f2a を合体させる
926 :デフォルトの名無しさん :2019/06/19(水) 04:55:07.98 ID:tVNS+22r.net 【出資】松本卓朗 人工知能詐欺【注意】 https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/
927 :デフォルトの名無しさん :2020/07/15(水) 15:52:06 ID:Gv1oILMC.net -v -vv こんなオプションで詳細を表示するコマンドがいくつかあります。 # こんなやつ date -v+1y rpm -ivh この v は何を表しているのですか?
928 :デフォルトの名無しさん :2020/07/15(水) 23:17:43.21 ID:sTXcW8ZQ.net 自己解決 verbose の v だと思う。
929 :デフォルトの名無しさん :2020/07/16(木) 06:12:18.40 ID:e3HYNoij.net grep の -v はたぶん inVert の v。
930 :デフォルトの名無しさん :2020/07/16(木) 18:41:02.51 ID:G1qqh9eh.net ググっても説明してある意味が分からないということ?
931 :デフォルトの名無しさん :2022/01/31(月) 21:18:15.66 ID:2XvruXKk.net UNIXでのシステム開発の実際が知りたい 今なんの言語を使って開発してるの? データベースとか何使ってるの?
932 :デフォルトの名無しさん :2022/01/31(月) 21:18:36.74 ID:2XvruXKk.net あ、UNIXっていうのはmacOS以外ね
933 :デフォルトの名無しさん :2022/02/01(火) 01:45:58.51 ID:aJyTMuPS.net 少し前までJavaを使っていたが、今はC++。 Rustに行きかけたんだけど偉い人に駄目と言われてしまった。
934 :デフォルトの名無しさん :2022/02/01(火) 13:10:18.35 ID:V7jk2Rfu.net へー、Rustとか新しいの使えるんだ UNIXってなんかバラバラで、みんな一体何をどう使って開発しているのか 全然想像つかないんだよね Linuxみたいにapt-getでrust入れてーとかして使うの?
935 :デフォルトの名無しさん :2022/02/01(火) 13:51:20.76 ID:/+irRzAS.net この頃は Linux ばっかり使っている UNIX がインストールされているマシンが身近にない
936 :デフォルトの名無しさん :2023/08/24(木) 18:51:08.86 ID:CY1BVKcv.net たとえば古い passwd ファイルの形式とかで使われていた root:x:0:0:root:/root:/bin/bash user01:x:500:500::/home/user01:/bin/bash のような「:」区切りのテキストファイルのデータベースを扱いたいとき C標準のライブラリは何ですか? Rust用のcrateで言うと何ですか?
937 :デフォルトの名無しさん :2023/08/24(木) 20:05:39.07 ID:AvQ+uDT8.net Ruby なら、CSV モジュールを使う require 'csv' options = { col_sep: ":" } # 列区切り文字 CSV.foreach( "input.csv", options ) do |row| # 1行ずつ処理する p row end 出力 ["root", "x", "0", "0", "root", "/root", "/bin/bash"] ["user01", "x", "500", "500", nil, "/home/user01", "/bin/bash"]
938 :デフォルトの名無しさん :2023/08/25(金) 06:42:11.04 ID:1ayFYibv.net >>830 Rust 区切るだけならstr.split(':')かstr.splitn(7, ':')が各項目のstrを次々と返してくれる 各項目毎に型(文字列や整数やOptionなど)フィールドを持つ構造体に入れるなら一般的にserde crateが万能 そのケースならcsv crateで':'をデリミタ指定すると容易
939 :デフォルトの名無しさん :2023/08/25(金) 09:30:30.62 ID:5+gJach+.net Rust https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=a74bc8e5de0b5fd5e1c4203865abfb2d っていうか中身読めちゃったテヘペロ
940 :デフォルトの名無しさん :2023/08/25(金) 10:27:32.18 ID:5+gJach+.net ちょと治した https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=c7b6a2e68759ea120ea83d56bdc72021 file の reader で読むと # Hello, and thanks for looking into the Rust Playground's security! っていう行が勝手に先頭に足される csv の reader で読むと余計な行が増えない 穴があるんかな
941 :デフォルトの名無しさん :2023/08/25(金) 10:29:22.44 ID:5+gJach+.net ああ has_headers() が読み飛ばしてただけか
942 :937 :2023/08/26(土) 03:49:56.11 ID:wsJDYSi/.net >>937 を修正。 2, 3列目を整数に変換する require 'csv' proc = Proc.new do |field, field_info| case field_info.index when 2, 3 then field.to_i else field # 処理なし end end options = { col_sep: ":", :converters => proc } # 列区切り文字 CSV.foreach( "input.csv", options ) do |row| # 1行ずつ処理する p row end 出力 ["root", "x", 0, 0, "root", "/root", "/bin/bash"] ["user01", "x", 500, 500, nil, "/home/user01", "/bin/bash"]
943 :デフォルトの名無しさん :2023/08/26(土) 21:18:17.35 ID:C41SkMxi.net C言語とRustについて聞かれているのに 一生懸命Rubyで答えてどうするの? ちょっと心配した方が良いレベルやぞ
944 :デフォルトの名無しさん :2023/08/27(日) 03:03:02.52 ID:/wQZGqy6.net Rustでは文字列から他の型(数値など)への変換やその逆を自動でやってくれる(serdeがある) 以下のように(好きな型名とフィールド名で)構造体を定義するだけで動く #[derive(Debug, serde::Deserialize)] struct Passwd { name: String, passwd: String, uid: u32, gid: u32, gecos: String, dir: String, shell: String, } fn main() -> Result<(), Box<dyn std::error::Error>> { // CSVリーダーをヘッダ無しで区切り文字コロンでPASSWD_PATHファイルから読み込みで作成 let mut reader = csv::ReaderBuilder::new() .has_headers(false) .delimiter(b':') .from_reader(std::fs::File::open(PASSWD_PATH)?); // 各行を構造体Passwdへ読み込む (様々なエラーを捕捉できるようResult型が返る) for result in reader.deserialize::<Passwd>() { let passwd = result?; println!("{passwd:?}"); } Ok(()) }
234 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★
本文 スレッドタイトル 投稿者