当我运行class DBConnection
{
/**
* Connection object
*/
private $connection;
/**
* Construct
*/
public function __construct()
{
// Create a db connection assign to $this->connection
$this->connection = new PDO(getenv('DB_HOST'), getenv('DB_USER'), ......);
}
/**
* Get all users
*/
public function getUser()
{
return $this->connection->query("SELECT * FROM USER");
}
}
/**
* New an instance of DBConnection
* After that, they are all prepared.
*/
$database = new DBConnection;
/**
* Call that function to get all users.
*/
$database->getUser();
时,我得到这样的输出。如果用户名和命令名很大,则第2列与第3列发生冲突。我不希望这样。每当发生碰撞时,我想用空格分隔这些列。我该如何处理?
当前输出:
sockstat -l
预期产出:
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
xxxxxxxxxx apacheexp2356 3 tcp46 *:9117 *:*
root ntpd 819 20 udp6 *:123 *:*
prometheus prometheus870 3 tcp46 *:9090 *:*
root httpd 1049 3 tcp6 *:80 *:*
UPDATE1: 命令有数字
的例外情况提供解决方案的当前输出:
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
xxxxxxxxxx apacheexp 2356 3 tcp46 *:9117 *:*
root ntpd 819 20 udp6 *:123 *:*
prometheus prometheus 870 3 tcp46 *:9090 *:*
root httpd 1049 3 tcp6 *:80 *:*
预期产出:
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
nagios nrpe 3 2222 4 tcp6 *:5666 *:*
答案 0 :(得分:2)
以下可能对您有帮助。
your_command | awk '{match($2,/[^[:digit:]]*/);$2=substr($2,RSTART,RLENGTH) FS substr($2,RSTART+RLENGTH)} 1'
或者为了区分可能有帮助的所有内容和数字,考虑到数字可能位于进程名称的最后:
your_command | awk '{
match($2,/[a-zA-Z]+/);
$2=substr($2,RSTART,RLENGTH) FS substr($2,RSTART+RLENGTH)
}
1
'
现在也添加非单线形式的解决方案。
dplyr
答案 1 :(得分:0)
用空格替换第21个字符可以解决问题
sed 's/./ /21'
。如果有任何特殊情况,请指出。