[過去ログ] シェルスクリプト総合 その26 [無断転載禁止]©2ch.net (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
435
(2): 名無しさん@お腹いっぱい。 [sage] 2017/12/05(火) 08:37:43.17 AAS
検証した結果、IFSを改行のみにして読み込み、その文字列をCutで抜くで達成できました
こうしないと空文字の列が詰まってしまいました

IFS_BAK=IFS
IFS=$'¥n'
exec < file.tsv
while read LINE
do
echo "${LINE}" | cut -f1 >> tmp1.txt
echo "${LINE}" | cut -f2 >> tmp2.txt
done
IFS=IFS_BAK
436: 名無しさん@お腹いっぱい。 [sage] 2017/12/05(火) 09:20:20.37 AAS
>>435
重箱の隅を突くようで悪いが,その書き方をするならシェバンは #!/usr/bin/bash
にしておけ。
$'string' は Bash の独自拡張だった気がする。
437
(1): 433 [] 2017/12/06(水) 10:04:48.53 AAS
>>430
430(3): 名無しさん@お腹いっぱい。 [sage] 2017/12/02(土) 09:15:00.24 AAS
すみません、bashでタブ区切りのファイルを配列に取り込む際、空の列が詰めて格納されてしまいます
そうならない方法はあるのでしょうか

exec < file.tsv
while read LINE
do
ARRAY=(${LINE})
done
今ごろ勘違いに気づいた
mapfileじゃ全然見当外れじゃないか…なんかごめん

たとえば
IFS=$'\t'
line="${IFS}b"
このとき
a=(${line})

a=("" "b")
となるのを期待しているのだけど、実際にはクオートしていないので
a=( b)
と同じことになって、先頭の「空の列」は残らない
かといってクオートしたら
a=("${line}")
これはタブ区切りで分割されることなく行全体がそのままになるので意味がない…

ということだよね
>>435のようにファイルに書き出すだけなら、そうやってcutでやるのが扱いやすそうだけど

もしどうしても配列にする必要があるときは、こんな感じでどうだろう
外部リンク:ideone.com
空だと消えてしまうなら空にならないよう何か入れとけばいいじゃない(配列にしてから取り除く)
という案
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.167s