よく忘れるチョイネタは、しっかりとメモしておこう。
引数の数。
if (iargc().ne.3) then write(6,*) 'Usage: xxxxxx' stop end
とか入れておくと、すっかり忘れたプログラムが何をするものか思い出されやすい。
めちゃ初心者です。
main()の括弧部分にargcと*argv[]を定義する。下は、入力ファイルと出力ファイルをコマンドラインから入力するコマンドの例。
int main (int argc,char *argv[]) { FILE *ifile, *ofile; char ifname[30],ofname[30]; sscanf(argv[1], "%s", &ifname); sscanf(argv[2], "%s", &ofname); ifile = fopen (ifname,"r"); ofile = fopen (ofname,"wb"); if (ifile==NULL || ofile==NULL) { printf ("Error opening files\n"); return; }
shではexport, cshではsetenv。
例えば
#!/bin/sh -f VAR1="aaa" VAR2="bbb" VAR3="ccc" NUM=1 while [ $NUM -le 3 ] ; do echo VAR${NUM} done
なんてことはできない。
Sさんから情報提供があり、できることがわかりました。上の例でいうと、このようにやります。
#!/bin/sh -f VAR1="aaa" VAR2="bbb" VAR3="ccc" NUM=1 while [ $NUM -le 3 ] ; do VAR=\$VAR$NUM VAR=`eval echo $VAR` echo $VAR NUM=`expr $NUM + 1` done exit
メモ書いていて良かった~。
しょっちゅう忘れる。
Cと同じ。小数%f、指数%e、整数%i。改行用の\nも忘れるな。%A.Bfで、A:総文字数、B:小数点以下桁。%A.Biの場合、Bの位まで0が埋められる。
awk '{SUM=SUM+$1}END{printf("%f\n",SUM/NR)}' list echo 1 | awk '{printf("%2.2i\n",$1+1)}'
数値列として入力しているつもりが文字列と認識され、思ったとおりいかないときがある。特にshellスクリプトの中で、shell変数を呼んだときに起きやすい。たとえばshellのなかで、
VAL=50 echo 100 | awk '$1 < "'"${VAL}"'" {print "awk think "$1" < ""'"${VAL}"'"} \ awk '$1 > "'"${VAL}"'" {print "awk think "$1" > ""'"${VAL}"'"}
を実行すると、
awk think 100 < 50
と出力される。これは、要するに文字列としては1より5の方が序列が早いから。
ここで数値列をはっきりさせたいときは+0などを追加すればよい。たとえば、
VAL=50 echo 100 | awk '$1 < "'"${VAL}"'"+0 {print "awk think "$1" < ""'"${VAL}"'"} \ awk '$1 > "'"${VAL}"'"+0 {print "awk think "$1" > ""'"${VAL}"'"}
とすればよい。
参考:http://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/letsawk/ValueOrString.html
sed -e s/"\/"/" "/g sample.txt
sed -r "s/[A-Z]+/\L&/g" sample.txtor
sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/" sample.txt
sed -r "s/[a-z]+/\U&/g" sample.txtor
sed "y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/" sample.txt
$ tar cvf hiddenfile.tar .[^.]*一段下がって、ディレクトリ名を指定すれば隠しファイルもすべてtarされる。(/home/keiをtarしたいときは、cd /home ; tar cvf tarfile kei )
$ tr \\r \\n <mac.txt >unix.txt
$ tr -d \\r <windows.txt >unix.txt
$ perl -p -e 's/\n/\r\n/' <unix.txt >windows.txt
$ wget -r -l1 --no-parent http://xxxx/xx/x/
$ wget -r -l1 --no-parent -A "*.gif" http://yyyy/yy/y/
$ rsync -avz -e ssh [Source] [Destination] Source and destination can be either remote or local path. Remote path should be [USER@]HOST:SRCPATH
Host rainbow HostName rainbow.iis.u-tokyo.ac.jp ServerAliveInterval 30 IdentityFile ~/.ssh/id_rsa Host isotope2 Hostname isotope2.aori.u-tokyo.ac.jp User kei ProxyCommand ssh rainbow nc %h %p
# curl inet-ip.info