需求: 一个文件内有多行,还有不定量的列,要求找出每行中最大的一个数字
使用awk实现:
cat list | awk '{max[NR]=0; for(n=1;n<=NF;n++) { if($n>max[NR]) max[NR]=$n; }}END{for(i=1;i<=NR;i++) print max[i]}'
输入输出示范:
$ cat list | awk '{max[NR]=0; for(n=1;n<=NF;n++) { if($n>max[NR]) max[NR]=$n; }}END{for(i=1;i<=NR;i++) print max[i]}'
400
9999
1234
1234
1234
$ cat list
200 300 400 100
123 2122 345 9999
222 444 333 1234
222 444 333 1234
222 444 333 1234
222 444 333 1234 <<<<<<< HEAD
需求: 统计每个IP对HTTP server的请求数
awk实现(这里假设access_log每行的第一列就是访问者的IP地址):
awk ‘{array[$1]++}END{for(i in array){print i, “accessed “, array[i], “ times”}}’ access_log | sort -gr | head -20 |
简单解释一下:在awk内部使用变量无需事先声明,如果变量是列表,那么列表的每个新的元素的值会默认设置为0。而awk又是流处理器,前面的部分相当于对每行进行操作,得到的数组就会是array[123.123.123.123]=1
这种形式。在END块里直接用一个循环输出列表中的每个元素就能得到每个IP访问了多少次了。
======= 222 444 333 1234
Read More...7e6037e695c33df0c7e4f6ff16a138401b41d4a6
Vim可以算是我的主力文本编辑器,这东西上手之后是一个非常好用的工具。Vim适合写市面上大部分的开发语言和脚本,当然用来写Markdown也是非常合适的,或者说越来越合适了。
相比较其他五花八门的Markdown编辑器,他们的书写体验都不是很好,基本上就是一个记事本加上了预览功能,但是他们共同比Vim强的一点就是:支持实时预览。今天我就要为Vim加上实时预览的功能。
首先看一下效果,非常漂亮。感谢此开源项目的作者iamcco。
本文以Win10环境为例,Linux/Mac用户请根据实际情况调整其中的参数
Read More...这是一个用来管理Vim插件的一个插件。直接把github上的项目名称配置进去,这个插件就可以通过一条命令直接下载项目,并且安装到Vim里。如果插件有更新,也可以通过一条命令直接更新全部插件,非常好用。我们用到的这个Markdown插件也是通过这个vim-plug来安装的。
layout: post title: “Java中位运算相关测试” description: “” category: [“Coding”] —
package com.dellyqiao;
import java.util.Arrays;
public class TestBinary {
public static void main(String[] args) {
System.out.println(51&5);
System.out.println(51|5);
System.out.println(51^5); //按位取值对比,不同为1,相同为0,可用来翻转某几位(1),用0保留原值
//变量交换值 (a^a为0,b^b为0。而数字^0为原数字。所以
//a^b为中间值,新b=中间值^b,新a=中间值^a)
int a = 51;
int b = 5;
a=a^b;
b=a^b;
a=a^b;
System.out.println(a + " " + b);
System.out.println(~0 + " " + ~1); //取反,每一位取反
System.out.println(2<<1); //左移。二进制位全部左移,左边二进制位丢弃,右边补0
//若舍弃的高位不包含1,则每左移一位,相当于乘以2
System.out.println(-14<<2);
System.out.println(4>>2); //右移。正数左补0,负数左补1,右边丢弃。
//每右移一位,相当于该数除以2。
System.out.println(-14>>2);
System.out.println(-14>>>2);//无符号右移。左补0,右丢弃
System.out.println(Integer.toBinaryString(112)); //转二进制
System.out.println(Integer.toHexString(112)); //转16进制
System.out.println(Integer.toOctalString(112)); //转8进制
System.out.println(Integer.parseInt("111001", 2)); //二进制转10进制
System.out.println(Integer.parseInt("27", 8)); //八进制转十进制
System.out.println(Integer.parseInt("1A", 16)); //16进制转十进制
//int转为byte[]
int id = 8143;
byte[] arr = new byte[4];
arr[0] = (byte)((int)(id >> 0*8) & 0xff);
arr[1] = (byte)((int)(id >> 1*8) & 0xff);
arr[2] = (byte)((int)(id >> 2*8) & 0xff);
arr[3] = (byte)((int)(id >> 3*8) & 0xff);
System.out.println(arr[0] +"," + arr[1] + "," + arr[2] + "," + arr[3]);
//byte[]转为int
int rs0 = (int)((arr[0] & 0xff) << 0*8);
int rs1 = (int)((arr[1] & 0xff) << 1*8);
int rs2 = (int)((arr[2] & 0xff) << 2*8);
int rs3 = (int)((arr[3] & 0xff) << 3*8);
System.out.println(rs0 + rs1 + rs2 + rs3);
//字符串与字节
String describe = "你好世界";
byte[] barr = describe.getBytes();
System.out.println(Arrays.toString(barr));
String des = new String(barr);
System.out.println(des);
}
}
默认情况下,WAS应用服务器,NodeAgent等等WAS服务是不会跟随系统自动启动的。本文将介绍如何配置WAS使其服务跟随系统启动。
WAS自动启动有两种方法,首先介绍第一种方法:
找到希望自启动的服务器,跳转到其配置界面,打开Java and Process Management,点击Monitoring Policy,如下图:
勾选Automatic restart,并且配置“Node restart state”为“RUNNING”。如图:
这样当NodeAgent/Node启动的时候,应用服务器也会自动启动。但是很明显,想要让这种方法生效,前提是NodeAgent/Node必须可以跟随操作系统启动。所以接下来我们需要继续配置:
Read More...
如题,如何在IBM WAS(WebSphere Application Server)上配置主从集群呢?
一个典型的基于IBM中间件的生产环境网站系统包含这几个部分:
WAS集群实际上分两种情况,一种是使用了ND(Network Deployment)版本的,另一种是使用了Base版的。我们分别来探讨。
Read More...
本文介绍如何从头开始为Apache配置多个虚拟主机。
Apache可以通过三种方式实现在同一台物理机上配置多个虚拟主机:
本文介绍2和3。
注意:本文环境是Suse Linux,安装的Apache也是由Novell公司的Suse源里提供的Apache2.2。Apache的默认配置、文件的路径之类的可能会与其它版本的Apache有所不同,所以此文仅供参考。但是配置方法适用于所有2.2的Apache。
Read More...
本文记录一次问题诊断的过程。
问题描述
如题,基于移动设备客户端的应用,其中一个获取人员列表的功能时快时慢。在测试过程中,100次中大概有10次移动客户端会出现timeout的错误。(timeout是在Mobile APP上设置的,Mobile APP设置的timeout值是30秒)
Read More...
Stop dmgr
#under dmgr/bin:
./stopManager.sh -username <user_name> -password <password>
Clear these folders
<dmgr_profile_root>/temp
<dmgr_profile_root>/wstemp
<dmgr_profile_root>/config/temp
Under /usr/IBM/WebSphere/AppServer/bin
./iscdeploy.sh -restore
Restart dmgr and see if everything is alright
./startManager.sh
If problem still persists, please run
<dmgr_profile>/bin/wsadmin.sh -conntype NONE -f deployConsole.py remove
<dmgr_profile>/bin/wsadmin.sh -conntype NONE -f deployConsole.py install
Restart dmgr to test.
废话不多说,DoubleTake文件传输的命令行配置方法如下:
d:\DoubleTake>DTCL.exe -i
Command: logon 10.52.21.51 csc_mcs "********"
User access level set to DT_FULL_ACCESS
Command: logon localhost csc_mcs "********"
User access level set to DT_FULL_ACCESS
//上面两条命令时登陆源服务器和目标服务器,确保用户访问权限是“DT_FULL_ACCESS",如果是别的字样,说明权限有问题,需要把账户添加到"Double-Take Admin"这个组。
Command: source localhost
Command: target 10.52.21.51
//指定源服务器和目标服务器。数据会从源到目标,如果设置错误,后果很危险。
Command: repset create newrep
//创建一个新的replication set,也就是要同步的数据集。
Command: repset rule add "d:\" include to newrep
Command: repset rule add "d:\DoubleTake" exclude to newrep
//为这个数据集添加规则,比如我就是需要同步D盘下所有文件,但是不要同步D:\DoubleTake这个目录。
Command: repset save
Command: repset list
- List of rep sets -
newrep disabled
Command: connect newrep to 10.52.21.51 map exact
//建立连接,连接之后数据就会开始传输了。
//注意上面的map exact代表完全按照路径去映射,比如源路径是d:\,那么文件也会传到目标服务器的d:\。
//当需要映射到不同的目标时,使用这个命令:
//connect datafile to 10.52.21.57 map d:\ to e:\
Command: status con 1
- Status for connection 1 -
Time established: 08/17/2015 13:59:07.473
Replication set: newrep
Target machine: 10.52.21.51
Target state: Mirror Required
Mirror bytes transferred: 0
Mirror bytes transmitted: 0
Mirror bytes in queue: 0
Replication bytes transferred: 2040
Replication bytes transmitted: 2040
Replication bytes in queue: 0
//这个命令可以看到当前这个链接的状态。一般来说建立的第一个链接编号就是1.
Command:
附上一份DoubleTake命令指南: DoubleTake Command Guide
Read More...
症状:
遇到应用无法部署的问题,提示已存在相同的应用名。在profile的installedApps下面没有发现这个应用,从IBM控制台上也无法找到任何关于这个应用的信息。
解决办法:
到DMGR的配置文件夹下: D:\IBM\WebSphere\AppServer\profiles\Dmgr01\config\cells\CTGQ3APP05Cell01
有两个文件夹:blas 和 cus,这两个文件夹下面有跟应用名一致的folder,删掉它们重新部署就可以了。
Read More...