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
UNIXプログラミング質問すれ Part10
レス数が900を超えています。1000を超えると表示できなくなるよ。
1unco ◆manko/yek.
2011/04/18(月) 17:06:36.77911906
2018/08/20(月) 22:17:50.27ID:aLr4GPAX >>910
アドバイスありがとう。
シェルスクリプトはパイプを使って多くのことを圧倒的な短さで出来るし、テキスト処理は最も得意な領域のはず。
しかしこれだけ単純な課題の答えが複雑になってしまうのなら、これは穴なんじゃないか、みんなどうしてるんだろう、と思ったんです。
俺は今月この種のタスクに何度も直面しました。
流れるコンパイルログの一部分だけをハイライトしたかったり、
Makefileのデバッグログのセクションに分かれた情報をファイルや一時変数を介さないで処理したかったり。
egzactのconvなどがシェルスクリプトのデータ生成という穴を埋めたように、この問題が鬼門なら、
解決するコマンドを考えてみたいです。
アドバイスありがとう。
シェルスクリプトはパイプを使って多くのことを圧倒的な短さで出来るし、テキスト処理は最も得意な領域のはず。
しかしこれだけ単純な課題の答えが複雑になってしまうのなら、これは穴なんじゃないか、みんなどうしてるんだろう、と思ったんです。
俺は今月この種のタスクに何度も直面しました。
流れるコンパイルログの一部分だけをハイライトしたかったり、
Makefileのデバッグログのセクションに分かれた情報をファイルや一時変数を介さないで処理したかったり。
egzactのconvなどがシェルスクリプトのデータ生成という穴を埋めたように、この問題が鬼門なら、
解決するコマンドを考えてみたいです。
912デフォルトの名無しさん
2018/08/20(月) 22:45:23.64ID:iMQAgpc+913デフォルトの名無しさん
2018/08/21(火) 01:05:48.21ID:kxzeRRBS シェルは、テキスト・文字列で渡す
一方、PowerShell はオブジェクトだから、構造を持てる。
配列・辞書もOK
Ruby などがベスト
一方、PowerShell はオブジェクトだから、構造を持てる。
配列・辞書もOK
Ruby などがベスト
914906
2018/08/21(火) 03:18:04.26ID:34Jmks75 UNIXプログラミングスレで Powershell を勧められるとは思いませんでしたよ。
他言語での解決が興味深いです。お題スレに投稿しました。よろしくどうぞ
https://mevius.5ch.net/test/read.cgi/tech/1524570314/#758
他言語での解決が興味深いです。お題スレに投稿しました。よろしくどうぞ
https://mevius.5ch.net/test/read.cgi/tech/1524570314/#758
915デフォルトの名無しさん
2018/08/22(水) 20:52:17.34ID:PmiUKg2L 考えたんだけど、もっと単純なタブ区切りデータ
hoo banana
bar apple
baz orange
の二項目名だけをソートして戻す、ということさえシェルスクリプトでは苦悶だ。
戻さないなら cut -f2 | sort でラクなのに。
awesome-cut -f2 <>(sort)
のようにできる読み書き可能ファイルを受け取るコマンド awesome-cut と読み書きプロセス置換<>(...)
機能をシェルに加えれば簡単になるかと思ったがダメだ。この方針はスケールしない。
プロセス置換はコマンド行をパーズした時点で名前付きパイプ?になるらしい。
だからネストされたデータを処理するには、フィルタ処理したい分のプロセス置換をあらかじめベタ書きしておかなくちゃならない。
それを避けるためには xargs のように自分でプロセスを起こす、文字列から作るようなコマンドが必要だ。
しかし現行のシェルスクリプトの仕様では、文字列はネストするほどクォーテーションが厳しくなり、使いにくくなる。
解決方法はわからない。シェルスクリプトを諦めるしかないか。
jqコマンドはJSONを扱う。処理の埋め込みも可能。そういうコマンドの中だけで完結させるか。
(お題スレの解答のPerlは美しかった…)
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.65ID:AXf2QKcH >>915
フィールド指定出来るソートコマンドを使う
フィールド指定出来るソートコマンドを使う
917デフォルトの名無しさん
2018/08/22(水) 22:35:15.97ID:PmiUKg2L >>916
サクッと書けそうなのが良いけど、「フィールド指定可能なtrコマンド」みたいに各コマンドに切り出し埋め込み能力が必要になっちゃう
サクッと書けそうなのが良いけど、「フィールド指定可能なtrコマンド」みたいに各コマンドに切り出し埋め込み能力が必要になっちゃう
918デフォルトの名無しさん
2018/08/22(水) 23:34:08.76ID:AXf2QKcH 何で急にありもしないコマンドを発明してんの?
919デフォルトの名無しさん
2018/08/22(水) 23:48:32.88ID:PmiUKg2L920デフォルトの名無しさん
2018/08/23(木) 00:56:37.97ID:qUZ5eK5Q powershell なら、フィールドでソートするのも簡単だけど
「powershell sort 列指定」で検索!
PowerShell の Sort-Object Tips
http://www.vwnet.jp/windows/PowerShell/2017032901/Sort-Object_Tips.htm
「powershell sort 列指定」で検索!
PowerShell の Sort-Object Tips
http://www.vwnet.jp/windows/PowerShell/2017032901/Sort-Object_Tips.htm
921デフォルトの名無しさん
2018/08/23(木) 01:19:50.15ID:FMBOl46f >>920
ほほう… これが Powershell ですか。項目名でソートできるのが強いですね。
ところでお二方に間違って伝わったみたいで… 書き方が不注意でした。
hoo banana
bar apple
baz orange
の第二カラムをソートして戻すとは、
hoo apple
bar banana
baz orange
を得ることです。第一カラムは変わらないことにご注意を。
sort -k 2 などでは行全体を移動してしまいます。
Powershell ではどのようにこれを実現しますか?
ほほう… これが Powershell ですか。項目名でソートできるのが強いですね。
ところでお二方に間違って伝わったみたいで… 書き方が不注意でした。
hoo banana
bar apple
baz orange
の第二カラムをソートして戻すとは、
hoo apple
bar banana
baz orange
を得ることです。第一カラムは変わらないことにご注意を。
sort -k 2 などでは行全体を移動してしまいます。
Powershell ではどのようにこれを実現しますか?
922デフォルトの名無しさん
2018/08/23(木) 01:26:09.02ID:lJLY7fZ1923デフォルトの名無しさん
2018/08/23(木) 02:39:41.54ID:FMBOl46f >>922
ありがとう。できました(全然苦悶じゃなかった)
all=$(cat); paste <(echo "$all" | cut -f1) <(echo "$all" | cut -f2 | sort)
これを応用すれば上の方の縦型の構造もできるかも。
paste の縦バージョンは cat な訳だから…
ありがとう。できました(全然苦悶じゃなかった)
all=$(cat); paste <(echo "$all" | cut -f1) <(echo "$all" | cut -f2 | sort)
これを応用すれば上の方の縦型の構造もできるかも。
paste の縦バージョンは cat な訳だから…
924923
2018/08/23(木) 03:04:21.42ID:FMBOl46f925デフォルトの名無しさん
2018/08/23(木) 04:41:50.26ID:qUZ5eK5Q 1列目を、f1 ファイルへ抽出する。
2列目を、f2 ファイルへ抽出する
f2 をソートして、f2a ファイルとする
f1, f2a を合体させる
2列目を、f2 ファイルへ抽出する
f2 をソートして、f2a ファイルとする
f1, f2a を合体させる
926デフォルトの名無しさん
2019/06/19(水) 04:55:07.98ID:tVNS+22r 【出資】松本卓朗 人工知能詐欺【注意】
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/
https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/
927デフォルトの名無しさん
2020/07/15(水) 15:52:06.92ID:Gv1oILMC -v -vv
こんなオプションで詳細を表示するコマンドがいくつかあります。
# こんなやつ
date -v+1y
rpm -ivh
この v は何を表しているのですか?
こんなオプションで詳細を表示するコマンドがいくつかあります。
# こんなやつ
date -v+1y
rpm -ivh
この v は何を表しているのですか?
928デフォルトの名無しさん
2020/07/15(水) 23:17:43.21ID:sTXcW8ZQ 自己解決
verbose の v だと思う。
verbose の v だと思う。
929デフォルトの名無しさん
2020/07/16(木) 06:12:18.40ID:e3HYNoij grep の -v はたぶん inVert の v。
930デフォルトの名無しさん
2020/07/16(木) 18:41:02.51ID:G1qqh9eh ググっても説明してある意味が分からないということ?
931デフォルトの名無しさん
2022/01/31(月) 21:18:15.66ID:2XvruXKk UNIXでのシステム開発の実際が知りたい
今なんの言語を使って開発してるの?
データベースとか何使ってるの?
今なんの言語を使って開発してるの?
データベースとか何使ってるの?
932デフォルトの名無しさん
2022/01/31(月) 21:18:36.74ID:2XvruXKk あ、UNIXっていうのはmacOS以外ね
933デフォルトの名無しさん
2022/02/01(火) 01:45:58.51ID:aJyTMuPS 少し前までJavaを使っていたが、今はC++。
Rustに行きかけたんだけど偉い人に駄目と言われてしまった。
Rustに行きかけたんだけど偉い人に駄目と言われてしまった。
934デフォルトの名無しさん
2022/02/01(火) 13:10:18.35ID:V7jk2Rfu へー、Rustとか新しいの使えるんだ
UNIXってなんかバラバラで、みんな一体何をどう使って開発しているのか
全然想像つかないんだよね
Linuxみたいにapt-getでrust入れてーとかして使うの?
UNIXってなんかバラバラで、みんな一体何をどう使って開発しているのか
全然想像つかないんだよね
Linuxみたいにapt-getでrust入れてーとかして使うの?
935デフォルトの名無しさん
2022/02/01(火) 13:51:20.76ID:/+irRzAS この頃は Linux ばっかり使っている
UNIX がインストールされているマシンが身近にない
UNIX がインストールされているマシンが身近にない
936デフォルトの名無しさん
2023/08/24(木) 18:51:08.86ID:CY1BVKcv たとえば古い passwd ファイルの形式とかで使われていた
root:x:0:0:root:/root:/bin/bash
user01:x:500:500::/home/user01:/bin/bash
のような「:」区切りのテキストファイルのデータベースを扱いたいとき
C標準のライブラリは何ですか?
Rust用のcrateで言うと何ですか?
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.07ID:AvQ+uDT8 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"]
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.04ID:1ayFYibv >>831
Rust
区切るだけならstr.split(':')かstr.splitn(7, ':')が各項目のstrを次々と返してくれる
各項目毎に型(文字列や整数やOptionなど)フィールドを持つ構造体に入れるなら一般的にserde crateが万能
そのケースならcsv crateで':'をデリミタ指定すると容易
Rust
区切るだけならstr.split(':')かstr.splitn(7, ':')が各項目のstrを次々と返してくれる
各項目毎に型(文字列や整数やOptionなど)フィールドを持つ構造体に入れるなら一般的にserde crateが万能
そのケースならcsv crateで':'をデリミタ指定すると容易
939デフォルトの名無しさん
2023/08/25(金) 09:30:30.62ID:5+gJach+940デフォルトの名無しさん
2023/08/25(金) 10:27:32.18ID:5+gJach+ ちょと治した
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 で読むと余計な行が増えない
穴があるんかな
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.44ID:5+gJach+ ああ has_headers() が読み飛ばしてただけか
942937
2023/08/26(土) 03:49:56.11ID:wsJDYSi/ >>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"]
を修正。
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.35ID:C41SkMxi C言語とRustについて聞かれているのに
一生懸命Rubyで答えてどうするの?
ちょっと心配した方が良いレベルやぞ
一生懸命Rubyで答えてどうするの?
ちょっと心配した方が良いレベルやぞ
944デフォルトの名無しさん
2023/08/27(日) 03:03:02.52ID:/wQZGqy6 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(())
}
以下のように(好きな型名とフィールド名で)構造体を定義するだけで動く
#[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(())
}
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 現役猟師・東出昌大、クマ被害続出も過熱する報道に「クマはそんな危ないもんじゃない」理由語る [muffin★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- さっっっっっっっっっっっっっっっっっむ!?!!?!?!?!!??!??!???!
- 日本の歴代総理大臣で1番ダメだった奴
- 高市政権「中国依存の経済から脱却する」?「それはダメーッ!」
- 【急募】今!!夜更かししている全お前らに告ぐ!!!何時に寝るのか宣言するのだ!!!
- 4時だから窓から4回ちんこ出した
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
