[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 01:32 / Filesize : 243 KB / Number-of Response : 985
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シェルスクリプト総合@LINUX Part4



1 名前:login:Penguin mailto:sage [2008/05/17(土) 13:44:57 ID:9hFWtCOD]
UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく
平和にLINUX的スクリプト談義しましょうよ。

初めての自作スクリプト、自信ないから見てください。な初心者から
トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで
いろいろな人に参加して頂けると嬉しいです。

perlやらPythonやらの話が混ざっても良いんでない?

Part3 : pc11.2ch.net/test/read.cgi/linux/1184077033/
Part2 : pc11.2ch.net/test/read.cgi/linux/1154578200/
Part1 : pc8.2ch.net/test/read.cgi/linux/1121994321/

>>2-5あたりに色々と。

29 名前:login:Penguin mailto:sage [2008/05/28(水) 15:43:32 ID:RYpMT0gt]
lessの代わりにleafpadを使えば

30 名前:login:Penguin [2008/05/28(水) 17:51:58 ID:4Ch8TEZp]
sh または bash で配列の結合ってできますか?


31 名前:login:Penguin mailto:sage [2008/05/28(水) 19:03:04 ID:xwe44XYV]
神様助けてください
関数に配列を渡す方法がわかりません

a=( あ い う え お )
fnc(){
echo ${1[0]}
}

fnc a

これで”あ”が出ると思ったんですがでません
教えてください
お願いします

32 名前:31 mailto:sage [2008/05/28(水) 20:20:45 ID:xwe44XYV]
シェルスクリプトにはスクリプト内でスコープが無いことを知り

a=( あ い う え お )
fnc(){
echo $a[0]
}
fnc

で”あ”が表示できるようになりました

33 名前:login:Penguin mailto:sage [2008/05/28(水) 23:35:58 ID:auu89eB+]
ループ文で外部ファイルから読み込んだコマンドを実行しようとしたときに
パイプ処理ができずに困ってます。(下記の場合、ls -lの結果しかでません)
サブシェルの方に行ってしまっているのかな?と思っているのですが、どう処理したらよいのでしょうか?

FILE=test.txt
while read LINE
do
$LINE
done < $FILE

■test.txtの内容(例)
ls -l | grep abc

34 名前:login:Penguin mailto:sage [2008/05/29(木) 00:07:17 ID:vP9yV59g]
>30
c=(${a[*]} ${b[*]})

>33
FILE=test.txt
while read LINE
do
eval $LINE
done < $FILE

35 名前:33 mailto:sage [2008/05/29(木) 00:17:22 ID:iY0MCSHA]
>>34
ありがとう!できました!便利なもんがあるんですね。
助かりました〜。

36 名前:login:Penguin [2008/05/30(金) 19:21:49 ID:p9jie4Lm]
echo $a[0]
これってちゃんと出力できるの?
${a[0]}
ってしないとエラーにならね?

37 名前:login:Penguin mailto:sage [2008/05/30(金) 19:45:31 ID:ZG0+9xy3]
% a[0]='abcef'
% echo $a[0]
abcef
% echo ${a[0]}
abcef
% echo $SHELL
/bin/zsh



38 名前:login:Penguin [2008/05/31(土) 06:16:56 ID:g+xuahlh]
#!/bin/sh

a[0]='abcef'
echo $a[0]

a[0]='abcef'
echo ${a[0]}
--------------------
[siomizu@cluster ~]$ ./test.sh
abcef[0]
abcef

39 名前:login:Penguin mailto:sage [2008/05/31(土) 16:10:17 ID:qUj8kkoX]
uniqはUTFには対応していないでしょうか?
たとえば、以下2行がある場合にuniqすると承のみになってしまいます。

承 <- 0xE689BF
良 <- 0xE889Af

環境はdebianのcoreutils 6.10-6、改行コードはLFを使用しています。
よろしくお願いします。

40 名前:login:Penguin mailto:sage [2008/05/31(土) 16:22:33 ID:q3zltHwi]
再現できるスクリプトを書いてください

41 名前:39 mailto:sage [2008/05/31(土) 16:33:59 ID:qUj8kkoX]
>>40
私でしょうか?
単に以下の2行を書いたファイルを用意してuniqです。




あ、「<-」以降は単にUTF8でこんなバイナリになるというのを示しただけです。
失礼しました。

42 名前:login:Penguin mailto:sage [2008/05/31(土) 16:36:28 ID:q3zltHwi]
私の環境では再現できませんので。
$ printf "\xe6\x89\xbf\n\xe8\x89\xaf\n" | uniq



43 名前:39 mailto:sage [2008/05/31(土) 16:46:52 ID:qUj8kkoX]
>>42
そうですか・・・
うちでは
% printf "\xe6\x89\xbf\n\xe8\x89\xaf\n" | uniq | hexdump -C
00000000 e6 89 bf 0a e8 89 af 0a |........|
00000008

でした。参考までにディストリとLC_ALL何にしているか教えていただけませんか?

44 名前:39 mailto:sage [2008/05/31(土) 17:01:51 ID:qUj8kkoX]
すいません 43でできてるじゃないかorz

LC_ALLをUTFにした状態だとうまくいきました。
uniqはロケール見るのか・・・

ありがとうございました

45 名前:login:Penguin mailto:sage [2008/06/01(日) 19:54:58 ID:3xisQkfz]
オライリの入門bash難しいよ・・・
これホントに入門なの・・・?

46 名前:login:Penguin mailto:sage [2008/06/01(日) 21:38:04 ID:EWKpU6i4]
オライリーは全般的に中級者が読む本だ

47 名前:login:Penguin [2008/06/02(月) 18:36:56 ID:GT1ocSub]
すみません。くだ質から誘導されてきました。よろしくお願いします。
bangou.txtには

123123
123123
100000


というように数値が入っています。(▲は空白ですが改行コードがはいってます)
この場合、1行目と3行目を比較して3行目に数値が入っている場合のみ2行目の値を別表に表示する
スクリプトを作りたいと思って色々調べて以下のようなスクリプトを作ってみましたけど
うまく動きません。(空白は空白として認識してくれないと行がずれるのでそれも認識したいです)


#!/bin/bash
for iii in `cat bangou.txt`
do
jjj=`sed -n '2p' bangou.txt`
export jjj
kkk=`sed -n '3p' bangou.txt`
export kkk
if [ "$iii" = -n ]
then
echo "$kkk>/dev/null
else
echo "$jjj > jjj.txt
paste jjj.txt toku.txt >> toku2.txt
rm -rf jjj.txt
fi
done

どこか間違ってるんでしょうか?よろしくお願いします。



48 名前:login:Penguin mailto:sage [2008/06/02(月) 19:03:36 ID:X93+nxzv]
>>47
やりたいことがよくわからん。
toku.txt の内容と、
実行後に toku2.txt がどういう内容になってればいいのかを書いてくれ。

49 名前:login:Penguin [2008/06/02(月) 19:28:58 ID:GT1ocSub]
>>48さん
返信ありがとうございます。
toku.txtは住所録です。
それをとりあえず一旦、toku2.txtにbangou.txtと組み合わせたものを
書き出しているだけなのでtoku2.txtには特に何も入っていません。
toku.txtは

東京都
東京都
東京都
東京都
東京都

愛知県
みたいな感じです。(▲は空白です)
これをそのままpasteでbangou.txtと結合すると
▲▲
123123 東京都
123123 東京都
100000 東京都
▲ 東京都
▲ 東京都
となってしまうのでこれを
▲▲
123123 東京都
123123 東京都
100000 東京都
100000 東京都
100000 東京都
というようにしたいんです。空白の行に一番最後の
番号を割り当てたいんです。わかりにくくてすみません。宜しくお願いします。

50 名前:login:Penguin [2008/06/02(月) 19:35:12 ID:GT1ocSub]
ごめんなさい。「▲は空白」と書きましたけど実際は改行コードが入っているだけです。
すみません。ごめんなさい。

51 名前:login:Penguin mailto:sage [2008/06/02(月) 19:44:36 ID:X93+nxzv]
いまいちよくわからんな。
>>47
> この場合、1行目と3行目を比較して3行目に数値が入っている場合のみ2行目の値を別表に表示する
っていう話もどうなったのやら。

シェルスクリプトでがんばるより perl あたりで書いちゃった方が早そう。

52 名前:login:Penguin [2008/06/02(月) 19:54:09 ID:GT1ocSub]
>>47の書き方が悪かったかもしれないです。ごめんなさい。
実際には>>49のような処理をしたいんです。
perlでもいいです。一旦処理できればいいんで。お願いします。

53 名前:login:Penguin mailto:sage [2008/06/02(月) 20:01:01 ID:6RTLtbwy]
pasteコマンドで結合して処理すればいいんじゃないの?

54 名前:login:Penguin [2008/06/02(月) 20:07:59 ID:GT1ocSub]
>>53さん
ご指導ありがとうございます。pasteで結合しただけだと
bangou.txtで空白の部分があるので >>49 のように
▲▲
123123 東京都
123123 東京都
100000 東京都
▲ 東京都
▲ 東京都
となってしまうので困ってます。
これを
123123 東京都
123123 東京都
100000 東京都
100000 東京都←空白が上の行と同じ番号
100000 東京都←空白が上の行と同じ番号
という風にしたいんです。お願いします。


55 名前:login:Penguin mailto:sage [2008/06/02(月) 20:09:26 ID:6RTLtbwy]
100000 でいいならsedで置換するだけじゃん。

56 名前:login:Penguin [2008/06/02(月) 20:11:48 ID:GT1ocSub]
>>55さん
お返事ありがとうございます。
数値は「10000」ではないんです。
上にある行の数値が欲しいんです。
わかりにくい説明ですみません。
宜しくお願いします。

57 名前:login:Penguin mailto:sage [2008/06/02(月) 21:14:50 ID:W+U/n8+A]
paste bangou.txt toku.txt | awk '{printf( "%s %s\n", (NF>1)? $1: onaji, $NF );
onaji=$1}'
とかかな?
でも、番号の1行目が空白のときはどうするのだろう。



58 名前:login:Penguin [2008/06/03(火) 00:37:37 ID:xzQHL5F2]
>>57さん
ありがとうございます!
明日早速試してみます。ありがとうございます。

59 名前:login:Penguin mailto:sage [2008/06/03(火) 16:14:01 ID:CIWG+PQ4]

あのスレ住人(特にdebユーザ)に、お願いなんだが、テンブレにあるし絶対ダメだとかいわんけど
書き込むとき、せめてシェルスクリプトと他のperlなんかのスクリプト言語は
意識して区別してくれまいか?ここ、「シェルスクリプトスレ」だから。

(上で「特にdebユーザ」と言ったのは、批判じゃなくて、前スレで発覚したんだが
 debはディストリレベルでコマンドとperlスクリプトなんかが混在になってるらしく
 ユーザ自身が区別しない慣習のようだから。でも、それって一般的じゃないし混乱のもとだよね?)

sedでもawkでもperlでもいいけど(ここら辺までは普通にシェルで使うだろけど、
perlで複雑なことやりこんだり)なんでもありありなら、わたしゃpythonやzenityや
織り込んでGUIやgtkベースの話はじめちゃうぞw



60 名前:login:Penguin mailto:sage [2008/06/03(火) 16:16:16 ID:8f1erIVq]
「テンブレ」?
「ディストリレベルで混在」?
どういう意味?

61 名前:login:Penguin mailto:sage [2008/06/03(火) 16:43:03 ID:CIWG+PQ4]
>>60
テンプレつーのは、つーか、>1に
>perlやらPythonやらの話が混ざっても良いんでない?
とあるし、>2-4にスクリプト言語のリンクも張ってある。

混在つーのは、具体例では、debではrenameコマンドがperlスクリプトprenameに置き換えてあるし
どうやらシェル上のパスの通し方なんぞが、perlなどを使いやすいように拡張されてるようだ。
ま、debユーザじゃないので詳しいところまではわからないけどね。

一応断っておくけどdeb批判じゃないよ。


62 名前:login:Penguin mailto:sage [2008/06/03(火) 16:56:54 ID:8f1erIVq]
「テンプレ」を「テンブレ」と書いていたことには気付いているのだろうか。

>>61
> 混在つーのは、具体例では、debではrenameコマンドがperlスクリプトprenameに置き換えてあるし
これは特殊かつ些細な例でしょ。
他に何かある?

> どうやらシェル上のパスの通し方なんぞが、perlなどを使いやすいように拡張されてるようだ。
そんな事実はないよ。

63 名前:login:Penguin mailto:sage [2008/06/03(火) 17:08:25 ID:CIWG+PQ4]
うわぁ、やっぱりdeb信者は・・・ごめんなさいね。趣旨だけ理解してちょ。

64 名前:login:Penguin mailto:sage [2008/06/03(火) 17:10:02 ID:GEyZQq+8]
これだけで信者扱いする君もそうとうなものだと思うぞ。

65 名前:login:Penguin mailto:sage [2008/06/03(火) 17:11:57 ID:CIWG+PQ4]
はいはい、ごめんなさい、ごめんなさい。あんたが大将。

66 名前:login:Penguin mailto:sage [2008/06/03(火) 17:23:16 ID:8f1erIVq]
信者って決めつけられてもな。
Debian も使ってるし他のディストリも使ってるし。
よく知りもしないのにいいかげんなこと言うな、ってだけ。

67 名前:login:Penguin mailto:sage [2008/06/03(火) 17:46:57 ID:L2QLzXUM]
ちんこ



68 名前:login:Penguin mailto:sage [2008/06/03(火) 20:26:13 ID:UQvQZC/E]
>>59
分界点が判らない。

69 名前:login:Penguin mailto:sage [2008/06/03(火) 20:51:52 ID:+2Z+EheD]
>>68
分界線という言葉ならあるが

70 名前:login:Penguin mailto:sage [2008/06/03(火) 22:24:45 ID:4bIEot6Q]
Debianではっつうか、そいつの問題だろう。
シェルスクリプトかperlスクリプトか見てわからないような奴は他の鳥使ったってわかるようにならない。

71 名前:login:Penguin mailto:sage [2008/06/03(火) 22:25:09 ID:meWc8EbG]
>>59
> debはディストリレベルでコマンドとperlスクリプトなんかが混在になってる

デブな人だけどなんのこっちゃ?
まさかPerlスクリプトなら*.plになるとか言ってるわけじゃないよな?

72 名前:login:Penguin mailto:sage [2008/06/03(火) 22:31:11 ID:/nacTMrw]
というか、俺も言ってる意味が分からない
とくにディストリレベルっていう言葉
ディストリレベルってのはどのレベル?

73 名前:login:Penguin mailto:sage [2008/06/03(火) 22:41:59 ID:8iXvkF35]
#/bin/sh
perl -e printf( "hello world\n" );

だと、>>59基準でOKか否かが分かんない。

74 名前:login:Penguin mailto:sage [2008/06/03(火) 22:48:40 ID:513yN16/]
例えばls って打つと ls.pl が起動されるって事だと読み取った。
Debian系は使っていないので真実は知らない。

75 名前:login:Penguin mailto:sage [2008/06/03(火) 22:49:50 ID:OcnJ3se+]
#!/bin/sh

perl sh.pl
ruby sh.rb
php sh.php

system("hoge.sh",$ret);
exec("hoge.sh",$ret);

exec("sed 's/B/A/g' $current > $tmp",$ret);
exec("rm $current",$ret);
system("mv $tmp $current",$ret);

もう人生バラ色です

76 名前:login:Penguin mailto:sage [2008/06/03(火) 23:39:04 ID:/nacTMrw]
俺の人生はルビー色

77 名前:login:Penguin mailto:sage [2008/06/03(火) 23:48:22 ID:J2hvNDuq]
質問です。

$ ls "a"
file1  file2
$ echo ls \"a\"
ls "a"
$ `echo ls \"a\"`
ls: cannot access "p": No such file or directory

三つめでエラーになるのはなんででしょう?
こういう時はどう書くのが正しいのですか?




78 名前:login:Penguin mailto:sage [2008/06/03(火) 23:52:30 ID:4a1SGQ4Q]
$ ls "a"
ls: a: No such file or directory
$ echo ls \"a\"
ls "a"
$ `echo ls \"a\"`
ls: "a": No such file or directory
$

79 名前:login:Penguin mailto:sage [2008/06/03(火) 23:53:03 ID:wxT19Ovz]
eval `echo ls \"a\"`

80 名前:77 mailto:sage [2008/06/03(火) 23:55:16 ID:J2hvNDuq]
>>79
おお!早速ありがとうございました。

81 名前:login:Penguin mailto:sage [2008/06/04(水) 10:36:15 ID:bCIXok9Z]
bashの/dev/nullについて質問します。
lsの表示結果でエラー出力だけは表示させずに
標準出力のみtest.txtファイルに出力したいのですが
自分の理解では以下に書いた2になりますが、表示結果
では1でないと通りません。どのようにイメージしたら宜しいのでしょうか?

1: ls /home/ > /dev/null 2>&1 > test.txt
2: ls /home/ > test.txt > /dev/null 2>&1

82 名前:login:Penguin mailto:sage [2008/06/04(水) 10:42:14 ID:jifIrR2s]
>>81
「bash のリダイレクトについて」だろ。
/dev/null は bash の問題ではない。

ls /home/ >/dev/null 2>test.txt
で OK。

83 名前:login:Penguin mailto:sage [2008/06/04(水) 11:04:40 ID:bCIXok9Z]
>>82
すいません、リダイレクトについてでした。回答有難うございます。
ls /home/ >/dev/null 2>test.txtについての流れで確認を
して頂きたいのですが宜しくお願い致します。

上記の標準出力1の状態について、lsの結果が/dev/nullに行く。
(ここでデータは破棄されてしまうという考えなのですが)
そして、エラー出力2はtest.txtになってますよね?

1の状態 /dev/null
2の状態 test.txt

84 名前:login:Penguin mailto:sage [2008/06/04(水) 11:52:58 ID:3E+PCnl7]
>>81
> 1: ls /home/ > /dev/null 2>&1 > test.txt

1) /dev/null を標準出力の出力先に指定
2) 標準出力の出力先をエラー出力の出力先に指定
3) test.txt を標準出力の出力先に指定

結果
標準出力: test.txt
エラー出力: /dev/null


> 2: ls /home/ > test.txt > /dev/null 2>&1

1) test.txt を標準出力の出力先に指定
2) /dev/null を標準出力の出力先に指定
3) 標準出力の出力先をエラー出力の出力先に指定

結果
標準出力: /dev/null
エラー出力: /dev/null

85 名前:login:Penguin mailto:sage [2008/06/04(水) 11:59:59 ID:jifIrR2s]
>>81
1: でほんとにうまく行ってる?

86 名前:login:Penguin mailto:sage [2008/06/04(水) 16:29:28 ID:bCIXok9Z]
>>84
リダイレクトは出力先を決めるだけなのですか。
解説して頂いた通りで色々パターンを考えてみましたら
出来るようになりました、有難うございます

>>85
一応処理結果では正常な雰囲気なのですが、>>81ですと
理解しずらいので、変えようか考えています。

レス遅れましたが皆さんありがとうございました

87 名前:login:Penguin mailto:sage [2008/06/04(水) 22:17:21 ID:T1bDhlj1]
>>86
シェルどころか日本語まで・・・



88 名前:login:Penguin mailto:sage [2008/06/05(木) 00:21:00 ID:lO8RLUCT]
与えられたパスを絶対パスに正規化したいのですがどうすればよいですか?
単に相対->絶対の変換をするだけじゃなくて
.とか..も適切に変換してくれるとうれしいのですが。


89 名前:login:Penguin mailto:sage [2008/06/05(木) 00:23:58 ID:qyhUQGl8]
>>88
`pwd`/$1

90 名前:login:Penguin mailto:sage [2008/06/05(木) 00:32:17 ID:brEG0pS6]
realpathだっけ?

91 名前:login:Penguin mailto:sage [2008/06/05(木) 06:27:50 ID:Ysl4yLMq]
ここはLinux板だからreadlink -fでどうか

92 名前:login:Penguin mailto:sage [2008/06/07(土) 17:03:59 ID:lYfLA/cT]
スレ違いのような気もしますが・・・
lsの出力が端末だとスペース区切りなのにパイプやリダイレクトすると改行になるのはどういう仕組みですか?


93 名前:login:Penguin mailto:sage [2008/06/07(土) 17:10:19 ID:6DqLCPKX]
isatty(3)

94 名前:92 mailto:sage [2008/06/07(土) 17:13:39 ID:lYfLA/cT]
なるほど、lsのほうで端末かどうかみてるんですね…
納得しました。どうもありがとうございます。

95 名前:login:Penguin mailto:sage [2008/06/08(日) 00:25:14 ID:z0g0MNBT]
スレ違いだと思うならくだ質に行きなさい。

96 名前:login:Penguin mailto:sage [2008/06/08(日) 14:37:28 ID:w3H8z2Sk]
シェルスクリプト中で、リダイレクトでファイルを生成するとファイル名が文字化けしてしまうのですが
一体何が悪いんでしょうか。
↓みたいなことになります。

$ echo $LANG
ja_JP.UTF-8
$ cat test.sh
echo a > "$1"
$ echo hoge > "あいうえお.hoge" ; ls
test.sh あいうえお.hoge
$ sh test.sh "あいうえお.hoga” ; ls
??????????.hoga test.sh あいうえお.hoge

touchとかなら文字化けしないようなのですが。


97 名前:96 mailto:sage [2008/06/08(日) 14:54:23 ID:w3H8z2Sk]
補足です。

$ ls | hexdump -C
00000000 e3 82 e3 84 e3 86 e3 88 e3 8a 2e 68 6f 67 61 0a |...........hoga.|
00000010 74 65 73 74 2e 73 68 0a e3 81 82 e3 81 84 e3 81 |test.sh.........|
00000020 86 e3 81 88 e3 81 8a 2e 68 6f 67 65 0a |........hoge.|
0000002d




98 名前:login:Penguin mailto:sage [2008/06/08(日) 21:58:48 ID:cpZuCikO]
ls --show-control-chars

99 名前:login:Penguin mailto:sage [2008/06/09(月) 19:55:01 ID:Dt/jCYdy]
jp.youtube.com/watch?v=x7pPajOvQGo
ワロタ

100 名前:login:Penguin mailto:sage [2008/06/09(月) 20:44:39 ID:19yx0Oqh]
注文スクリプトを作りました、ってこと?

101 名前:login:Penguin mailto:sage [2008/06/09(月) 20:52:39 ID:1XPLtUDQ]
日本でもオンライン注文のピザ屋があれば出来そうね。
映画ジュラシックパークの中でプログラマーがデブでピザ食べていたけど、
この動画もその皮肉?

102 名前:login:Penguin mailto:sage [2008/06/09(月) 20:56:56 ID:zrUasBao]
シェルスクリプトじゃないけど。
e8y.net/blog/2006/07/25/p126.html

103 名前:login:Penguin mailto:sage [2008/06/09(月) 21:02:45 ID:zrUasBao]
>>101
hacker の食べ物といえば
ピザと Jolt Cola と相場が決まっておる。

104 名前:login:Penguin mailto:sage [2008/06/10(火) 00:00:50 ID:Uz5XyeDf]
なんだPizza Partyか
slashdot.jp/article.pl?sid=04/05/08/0858242

105 名前:login:Penguin [2008/06/10(火) 13:27:23 ID:Gys5ZtGT]
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓
→ →2481211→
→ →2481211→↓
tomo.txtの中身はこうなっています。(→はタブ、↓は改行コードです)
これで2列目に何も文字列が入っていない場合は3列目も何も文字列を
入れないようにしたいです。(上のtxtの場合だと下の2行が対象になります)
sedとcutでなんとかなるかと思ったんですけどなかなかうまくいきません。
誰かいいスクリプトを教えて下さい。宜しくお願いします。

106 名前:login:Penguin mailto:sage [2008/06/10(火) 14:03:41 ID:rnP/TIGa]
これでどう?

awk '{if (length($2) != 0) print;}' tomo.txt

107 名前:105 [2008/06/10(火) 15:27:43 ID:Gys5ZtGT]
早速のレスありがとうございます。でもうまく動かないです。。。
試しにlengthの値を変えてみたりしたんですが何も変化がないです。。



108 名前:login:Penguin mailto:sage [2008/06/10(火) 16:24:40 ID:mINSOvv3]
>107
もっと具体的に目的を書かないとどういう結果が欲しいのか解らんよ。
>105の下から2行目は改行が入ってないの?
それとなにも列に入っていないと言いつつ全角スペースが入っているのは何故?
まあ、やりたいことを推測して例を出せばこんな感じか?
cat tomo.txt | while read LINE;do set -- $LINE; if [ $# = 3 ]; then echo "$LINE"; fi; done

109 名前:105 [2008/06/10(火) 19:02:47 ID:CM93IypP]
>>108さん
ご回答ありがとうございます。
すみません。
>105の下から2行目は改行が入ってないの?
入ってます。
>それとなにも列に入っていないと言いつつ全角スペースが入っているのは何故?
実際には入っていません。
ですから正確にはtomo.txtはこうなってます。
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓
→→2481211→↓
→→2481211→↓

110 名前:105 [2008/06/10(火) 19:05:04 ID:CM93IypP]
それを以下の下2行の2列目に文字列がない場合は
削除したいので以下のような結果を出して欲しいんです。
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓
→→→↓
→→→↓

何度もすみません。よろしくお願いします。

111 名前:105 [2008/06/10(火) 19:19:42 ID:CM93IypP]
cat tomo.txt | while read LINE;do set -- $LINE; if [ $# = 3 ]; then echo "$LINE"; fi; done
を試してみましたけどやはり何も変化はありませんでした。
すみません。お願いします。

112 名前:login:Penguin mailto:sage [2008/06/10(火) 19:35:16 ID:gcco3DVH]
よくわからんけど、タブが2回続いたらタブ3個だけの行に置き換えるとかじゃだめなの?
やり方は知りません

113 名前:login:Penguin mailto:sage [2008/06/10(火) 21:34:41 ID:39ga6S1g]
これはどうだ?

awk -F '¥t' '{if ($2 == "") { $3 = ""}; print}' < tomo.txt

awkのデフォの列識別はタブじゃないから-Fで指定してね。


114 名前:105 [2008/06/11(水) 03:27:04 ID:bnnOzDXT]
>>113
ありがとうございます。今日はこんな時間なので明日試してみます。
'\t'の部分がうまく識別してくれたらいけそうな感じがします。

115 名前:105 [2008/06/11(水) 05:10:34 ID:bnnOzDXT]
おはようございます。
今試してみたらうまく動きました。ありがとうございました。

116 名前:login:Penguin mailto:sage [2008/06/11(水) 05:47:46 ID:wK/2Md+f]
>>114 >>115
明日ってw 

117 名前:105 [2008/06/11(水) 08:14:21 ID:sVHDZWwZ]
あっーーー!よくみたら
2037→1048→2481207→↓
2037→1048→2481207→↓
20311→1056→2481211→↓
20320→1114→2481218→↓
20320→1114→2481218→↓
20326→1155→2481211→↓
20326→1155→2481211→↓


って感じで最後の2行のタブが全部消えてました。。。
これは消えると困るんです。再度お願いします。。。



118 名前:login:Penguin mailto:sage [2008/06/11(水) 08:47:58 ID:uz75y6lZ]
難問が…

119 名前:login:Penguin mailto:sage [2008/06/11(水) 10:00:16 ID:NnMk6hEw]
>112でいけるだろ
sed -e 's/\t\t[^\t][^\t]*/\t\t/' tomo.txt
\tが使えなかったらタブで置きかえる。

120 名前:login:Penguin mailto:sage [2008/06/11(水) 10:14:39 ID:tvbxZjG7]
>>117

あり? $2 = ""をしない行はちゃんとタブで分けたまま出力してるのに
置き換えをした行はスペースが出力区切り文字になっちゃうな。

じゃ、無理矢理修正

awk -F '¥t' -v OFS='¥t' '{if ($2 == "") { $3 = ""}; print}' < tomo.txt

OFS はoutput field separator



121 名前:105 [2008/06/11(水) 11:52:44 ID:sVHDZWwZ]
ありがとうございます!
今度こそ大丈夫です!本当にありがとうございます!

122 名前:login:Penguin mailto:sage [2008/06/11(水) 22:25:09 ID:8Wsl19+C]
Open Foundation Software じゃないのか。

123 名前:login:Penguin mailto:sage [2008/06/12(木) 00:10:41 ID:JqmZrOtu]
>>122
OSFですがw Open Software Foundation


124 名前:login:Penguin mailto:sage [2008/06/12(木) 11:24:21 ID:irJT+vdW]
誰かピザハット対応ピザ注文コマンド作ってくれないものか。

125 名前:login:Penguin mailto:sage [2008/06/12(木) 11:52:43 ID:3DTOjPry]
>>124
出前館にあるみたいだから、>>102 をいじれば作れるんじゃない?

126 名前:login:Penguin [2008/06/12(木) 12:44:22 ID:Y4yiWWC/]
#xxx.txtの1行目を変数iに代入します
for i in `cat xxx.txt`
do
#xxx.txtの2行目を$jに入れます
j=`sed -n '2p'
export j
#変数eeeにxxx.txtの2行目から15行目を代入します
eee=`sed -n '2-15p'
export eee
#pasteで結合できるように変数をtxtファイルに入れます
echo $i > i.txt
echo \t > ccc.txt
echo $eee > eee.txt
if
#xxx.txtの行の先頭が20から始まる場合
then test $j = "^20"
#結合します
paste i.txt ccc.txt eee.txt
else
#何もしない
fi
done

初心者です。こんなスクリプトを作ったんですけどうまく動きません。
修正していただけるとありがたいです。お願いします。

127 名前:126 [2008/06/12(木) 12:55:44 ID:Y4yiWWC/]
#xxx.txtの1行目を変数iに代入します
for i in `cat xxx.txt`
do
#xxx.txtの2列目を$jに入れます
j=`sed -n '2p'
export j
#pasteで結合できるように変数をtxtファイルに入れます
echo $i > i.txt
echo \t > ccc.txt
if
#xxx.txtの行の先頭が20から始まる場合
then test $j = "^20"
#結合します
paste i.txt ccc.txt eee.txt
else
#何もしない
fi
done

間違えました。eee.txtは別途作りますので上記のような感じです。



128 名前:login:Penguin [2008/06/12(木) 14:03:25 ID:Y4yiWWC/]
意味不明ですみません。会社から回りの人の目を盗みながら
こそこそと2ちゃんねるやってるんで・・・
これでお願いします。
#変数aaaにxxx.txtの1行目を代入します
for aaa in `cat xxx.txt`
do
#変数bbbにxxx.txtの2行目を代入します
bbb=`sed -n '2p'
export=bbb
#変数cccに$iの1列目を代入します
ccc=`cat $i | cut -f1`
export=ccc
#変数dddに$iの2から14列目を代入します
ddd=`cat $i | cut -f2-14`
exprot=ddd
if
#xxx.txtの2行目の先頭行が20の場合は切り出したファイルを結合します
then test $aaa = "^20"
paste ccc.txt tab.txt ddd.txt
elsei
#それ以外の場合はその列をそのままファイルに書き出します
echo aaa.txt
fi
done

129 名前:login:Penguin mailto:sage [2008/06/12(木) 18:57:20 ID:RuYhMH5C]
>>126
日本語でおk

人に説明するためにやりたいことを整理すると自然に解決したりするものよ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<243KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef