[過去ログ] シェルスクリプト総合 その27 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
282(5): 名無しさん@お腹いっぱい。 [] 2018/06/08(金) 23:18:13.62 AAS
Excelから出力したCSVのように一行(?)の中に改行が含まれた
データを扱うにはどうしたら良いでしょうか?
もう少し具体的に書きます。
カンマ区切りのCSVデータだと仮定して、
シェルスクリプトの中に関数を一行ごとに呼び出し、
列を引数に対応させたいです。
例えば以下のような内容のファイルがあったとして
a1,a2,a3,a4
b1,b2,b3,b4
c1,c2,c3,c4
syori "a1" "a2" "a3" "a4"
syori "b1" "b2" "b3" "b4"
syori "c1" "c2" "c3" "c4"
という風にsyori関数を呼び出したいのです。
ただし実際には各項目(a1等の部分)にExcelから出力したデータのように
改行やカンマやダブルクォートやシングルクォートや空白が入ることがあるのです
284: 名無しさん@お腹いっぱい。 [sage] 2018/06/08(金) 23:19:28.84 AAS
>>282-283は、ここから移動してきました
【Bash】Windows Subsystem for Linux【WSL】3
2chスレ:linux
328(1): 名無しさん@お腹いっぱい。 [sage] 2018/06/10(日) 09:26:13.67 AAS
いや>289289(5): 名無しさん@お腹いっぱい。 [sage] 2018/06/08(金) 23:57:15.15 AAS
邪道としては、改行コードとか\を絶対に使われない文字に置換して最後にまた戻すとかやったな
アルメニア文字とかに置換するんやで
で答えとるやん
>318318(2): 名無しさん@お腹いっぱい。 [sage] 2018/06/09(土) 23:38:49.68 AAS
質問です。一データの中に改行が含まれた
データを扱うにはどうしたら良いでしょうか?
ってようは>282の質問し直しでしょ
413: 名無しさん@お腹いっぱい。 [sage] 2018/06/10(日) 20:56:07.54 AAS
>>282
GNU awk の FPAT を使ってみる。一論理行のデータ数は4個で固定、という前提。
gawk -v RS='\0' -v FPAT='"(([^,\n]*)|(([^"]|\\\\"|\"\")*))"' \
'function syori(v1,v2,v3,v4){ ## ここで何らかの処理 ## }
{
i=1
while(i<NF){
syori($(i++),$(i++),$(i++),$(i++))
}
}' data.txt
463(1): 名無しさん@お腹いっぱい。 [sage] 2018/06/11(月) 00:03:29.86 AAS
>>461461(2): 名無しさん@お腹いっぱい。 [sage] 2018/06/10(日) 23:43:44.04 AAS
>>460
あー、そういうことか。いちおう試してみていたんだけどね。できんの?
後処理が必要ないのでそれができるのなら確かにそうだな
ん? ようやく理解したのか?
煽りフェーズが終わると途端につまらなくなるなw
普通にできるし、俺はすでに近い形のものを実装している
自分の用途に合わせて最適化してるんで、汎用的にはなってないがな
(その後に>>282を質問という形でおまいらに問題を出したのだよ)
最初はデータの方をエスケープしてたんだが目に見えて遅くなってな
エスケープの方式をシェルビルトインのprintfでアンエスケープ
できるようにもしたが大した効果はなかった。
そこで制御文字を眺めていたら、その用途ピッタリの文字を見つけたのだよ
データとしては、0x1F(US: Unit Separator)を各項目の区切り(CSVでいうカンマ相当)
0x1Eを(RS: Record Separator)を名前の通り、データ区切りとして使ってる
USの方はIFSを使うことでPOSIX準拠でforなどで処理することができる
さらに0x1D(GS: Group Separotor)を使えば階層構造があるデータを取り扱えるだろうし
0x1C(FS: File Separator)を使えば標準入力で複数のファイルを渡すようなこともできるだろう
便利だがそれに気づいたのは>>323323(5): 名無しさん@お腹いっぱい。 [sage] 2018/06/10(日) 02:20:54.22 AAS
U+001EやU+001Fを区切り文字として利用してる方いらっしゃいますか?
結構便利(絶対に他の文字と衝突しない)だと思うんですが、そういうシェルスクリプトを見たことがありません。
が最初。
おまいらは最初、シェルスクリプトで扱うもんじゃないとか言っていた
>>323のあともその使い道に気づかないでいた。まだまだだなw
522(2): 名無しさん@お腹いっぱい。 [sage] 2018/06/12(火) 12:05:07.20 AAS
>>520520(1): 名無しさん@お腹いっぱい。 [sage] 2018/06/12(火) 11:54:38.75 AAS
>>519
じゃあ、これ相当のことをやってみて
ここまで簡潔に書ける言語をシェルスクリプト以外しらない
シェルスクリプトは(特定の用途に対して)最善だから使ってるんだよ
これってどれ?
ここ>>282-以降にある記述だとてんで仕様になってないから、
仕事レベルとまではいかないまでも、
学生演習の問題として出せる程度には仕様をまとめて書いて。
あとPythonに限らずスクリプト言語はどれでも
シェルにパイプ繋いで任意のシェルコマンドが実行できるから、
シェルにできてPythonでできないことなんてないよ。
勿論シェルでできないことも普通にできるし。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.043s