1/15/14

【UNIX】シェルスクリプトの勉強【Linux】

1: 名無し募集中。。。 2013/12/07(土) 00:08:51.73 0
問題:
ファイルをn行ごと1行にまとめるhoge.sh を作成せよ。

% cat a
a
b
c
d
e
% foge.sh -n 2 a
a b
c d
e
% foge.sh -n 2 -d ":" a
a:b
c:d
e:

2: 名無し募集中。。。 2013/12/07(土) 00:11:37.80 0
remove

3: 名無し募集中。。。 2013/12/07(土) 00:11:45.61 0
C言語じゃだめなんですか



4: 名無し募集中。。。 2013/12/07(土) 00:12:19.24 0
rm -rf

5: 名無し募集中。。。 2013/12/07(土) 00:16:09.30 0
shutdown -h now

7: 名無し募集中。。。 2013/12/07(土) 00:18:17.99 0
ls -l

8: 名無し募集中。。。 2013/12/07(土) 00:18:33.07 0
hello world

9: 名無し募集中。。。 2013/12/07(土) 00:19:05.75 0
exit

10: 名無し募集中。。。 2013/12/07(土) 00:19:10.60 0
service dhcpd restart

12: 名無し募集中。。。 2013/12/07(土) 00:20:34.67 0
top

13: 名無し募集中。。。 2013/12/07(土) 00:22:33.85 i
きょうびBシェルもなあ
つかもう鯖缶ぐらいしかシェル書く現場無いな

17: 名無し募集中。。。 2013/12/07(土) 00:32:42.89 0
入力ファイルをパラメータで指定させるところにセンスがない
標準入力だろJK
それとも複数回走査しないとできんのか>>1

37: 名無し募集中。。。 2013/12/07(土) 08:20:01.99 0
>>17
1 #!/bin/bash
2 NUM=2
3 DELIMIT=' '
4 while getopts n:d: OPT
5 do
6 case $OPT in
7 "n" )
8 NUM=$OPTARG;;
9 "d" )
10 DELIMIT=$OPTARG;;
11 esac
12 done
13 shift `expr $OPTIND - 1`
14 c=0
15 cat "$@" | while read buf
16 do
17 echo -n "$buf"
18 c=$(($c + 1))
19 if [ $c -eq $NUM ]; then
20 echo
21 c=0
22 else
23 echo -n "$DELIMIT"
24 fi
25 done
26 echo

18: 名無し募集中。。。 2013/12/07(土) 00:52:29.81 0
startx

21: 5KU1hSz 2013/12/07(土) 01:02:24.99 O
コマンドとシェルスクくべつつけろ > null

22: 名無し募集中。。。 2013/12/07(土) 01:27:09.21 0
外部コマンド使わなくてファイルから入力する方法あったっけ?

23: 名無し募集中。。。 2013/12/07(土) 01:29:29.40 0
ごめんreadがあった・・・

24: 名無し募集中。。。 2013/12/07(土) 01:52:20.67 0
まあオプション取得をシェルスクリプトで書いて
メインの処理をperl 一行かな

25: 名無し募集中。。。 2013/12/07(土) 01:52:30.62 0
#!/bin/sh
c=0
while read buf
do
  echo -n "$buf"
  c=$(($c + 1))
  if [ $c -eq 2 ]; then
    echo ""
    c=0
  fi
done < $1
echo ""

とりあえず版

26: 名無し募集中。。。 2013/12/07(土) 02:05:57.74 0
cat a | ruby -e 'n=2;d=":";s=STDIN.readlines;s.each_with_index{|l,i|print(l.chomp,(((i+1)%n==0)?"&yen;n":d));puts if(i+1)%n!=0&&i==s.length-1}'

28: 名無し募集中。。。 2013/12/07(土) 02:08:52.93 0
>>26
化けた
&yen;はバックスラッシュな

27: 名無し募集中。。。 2013/12/07(土) 02:07:58.78 0
#!/bin/bash
NUM=2
DELIMIT=' '
while getopts n:d: OPT
do
&nbsp;case $OPT in
&nbsp;"n" )
&nbsp;&nbsp;NUM=$OPTARG;;
&nbsp;"d" )
&nbsp;&nbsp;DELIMIT=$OPTARG;;
&nbsp;esac
done
shift `expr $OPTIND - 1`
c=0
while read buf
do
&nbsp;echo -n "$buf"
&nbsp;c=$(($c + 1))
&nbsp;if [ $c -eq $NUM ]; then
&nbsp;&nbsp;echo
&nbsp;&nbsp;c=0
&nbsp;else
&nbsp;&nbsp;echo -n "$DELIMIT"
&nbsp;fi
done < $1
echo

32: 名無し募集中。。。 2013/12/07(土) 02:28:38.18 0
>>27
完璧だね
shift `expr $OPTIND - 1`

shift $(($OPTIND - 1))
でもいいかも

30: 名無し募集中。。。 2013/12/07(土) 02:14:08.02 0
シェルスクリプトでループ回したら意外に可読性が良い

31: 名無し募集中。。。 2013/12/07(土) 02:22:02.15 0
rubyを使うのはちょっとずるい感じがする
getoptsはギリギリOKなのかな

34: 名無し募集中。。。 2013/12/07(土) 04:43:57.72 0
確かに鯖缶くらいしかシェルスクリプト扱わないよね
FreeBSDはブート時のサービス立ち上げる処理はsh使ってるけど
LinuxやUNIXは今どうなってるの

35: 名無し募集中。。。 2013/12/07(土) 06:12:28.12 0
こういうのは awk が一番お手軽だったんだよな

36: 名無し募集中。。。 2013/12/07(土) 06:40:23.98 0
自分は評価しきれていないけど
http://ja.wikipedia.org/wiki/%E3%A6%E3%8B%E3%B1%E3%BC%E3%B8%E9%8B%E7%BA%E6%8B%E6%B3%95
こんな考え方もあるみたいよ

38: 名無し募集中。。。 2013/12/07(土) 08:35:29.54 0
readで読み込むと先頭と末尾のスペース取れちゃうんだよな...

下記リンクから、現在最も読まれている人気記事ランキングを読めます
本日の2chまとめブログランキング

No comments :

Post a Comment