シェルスクリプト総合 その24©5ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 転載ダメ©2ch.net
2014/11/11(火) 00:54:03.43□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その23
http://peace.2ch.net/test/read.cgi/unix/1404204950/
0203名無しさん@お腹いっぱい。
2015/01/08(木) 19:41:16.46awk -v RS='' -v FPAT='( *[0-9]+, *\n?){1,100}' \
'{
for(i=1;i<=NF;i++){
gsub(" *\n"," ",$i);
gsub(", *$","",$i);
print $i > i ".txt";
}
}' a.txt
上手く行けば 1.txt ... 7.txt というファイルができるはず
0204名無しさん@お腹いっぱい。
2015/01/08(木) 20:20:07.70awk -v RS=, '{print $0+0 > int(NR/100)+1 ".txt" }'
0205名無しさん@お腹いっぱい。
2015/01/08(木) 20:36:37.660206203
2015/01/08(木) 20:51:41.180207203
2015/01/08(木) 20:56:03.240208名無しさん@お腹いっぱい。
2015/01/08(木) 21:09:50.76見易さの為-r付けてます
#!/bin/sh
sed -re '
:loop;
$! {
N;
b loop;
}
s/,[ \n]+/, /g;
s/([0-9]+, ){100}/&\n/g;
' | {
i=1
while read line
do
echo "$line" > "$(( i++ )).txt"
done
}
0209名無しさん@お腹いっぱい。
2015/01/08(木) 21:43:46.83tr -d '\r\n' < file
0210名無しさん@お腹いっぱい。
2015/01/08(木) 21:52:48.42i=1
while [ $i -le 7 ]; do
(j=1; while [ $j -le 100 ]; do echo "$1"; shift; done) > $i.txt
0211209
2015/01/08(木) 21:57:31.95tr -d '\r\n' < file | tr ',' '\n' | split -l 100
0212名無しさん@お腹いっぱい。
2015/01/08(木) 21:58:20.67set -- `sed 's/,/ /g' input.txt`
i=1
while [ $i -le 7 ]; do
(j=1; while [ $j -le 100 ]; do echo "$1"; shift; j=$((j + 1)); done) > $i.txt
shift 100
i=$((i + 1))
done
0214名無しさん@お腹いっぱい。
2015/01/08(木) 23:07:34.580215名無しさん@お腹いっぱい。
2015/01/09(金) 00:45:24.74file=`cat "$1"`
for i in `seq 1 7`; do
for j in `seq 1 100`; do
echo -n ${file%%,*}, >>$i.txt
file=${file#*,}
done
done
0216名無しさん@お腹いっぱい。
2015/01/09(金) 01:53:20.06$ grep -Po '[0-9]+' data.txt | parallel --pipe -L 100 -n 1 -k 'cat - > {#}.txt'
0217名無しさん@お腹いっぱい。
2015/01/09(金) 01:59:25.49$ grep -o '[0-9]\+' data.txt | split -l 100
■ このスレッドは過去ログ倉庫に格納されています