小编cod*_*ter的帖子

使用awk找到第二高薪

我有一个文件如下

1 rob   hr 10000
2 charls it 20000
4 kk  Fin 30000
5 km  it 30000
6 kl  it 30000
7 mark  hr 10000
8 kc  it 30000
9 dc  fin 40000
10 mn  hr  40000
3 abi  it 20000
Run Code Online (Sandbox Code Playgroud)

其中4rth列包含第2列中个人的工资.我希望获得第二高工资(或第n个最高工资)的所有记录.样本输出:

 4 kk  Fin 30000
 5 km  it 30000
 8 kc  it 30000
 6 kl  it 30000
Run Code Online (Sandbox Code Playgroud)

我试过这个:

sort -k4,4 employee.txt  | awk 'NR==1{a=$4;next}{if($4>a){print $0 ;exit} else next;}'   | a=`awk '{ print $4}'` |  awk -v b=$a  '$4==b'  < …
Run Code Online (Sandbox Code Playgroud)

shell awk sed

1
推荐指数
1
解决办法
555
查看次数

在Bash脚本中使用大括号内的int变量

我有一个脚本,显示目录中包含5个或更少字符的文件名:

#!/bin/bash

ls | egrep '^.{0,5}$'
Run Code Online (Sandbox Code Playgroud)

示例目录:

foobar
foo
bar
Run Code Online (Sandbox Code Playgroud)

输出:

foo
bar
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用变量代替5时,如下所示,我得不到输出.没有错误,所以我假设它仍在寻找某种范围.但不是0-5.

#!/bin/bash

declare -i num=5
ls | egrep '^.{0,$num}$'
Run Code Online (Sandbox Code Playgroud)

如何在花括号内使用变量?

linux bash

1
推荐指数
1
解决办法
308
查看次数

awk:如果找到模式,则计算直到第一个空行的行

在大型文档中,一旦找到模式,计算从模式的下一行到第一个空行的所有行:

...
PATTERN 
BBBB
CCCC

...
Run Code Online (Sandbox Code Playgroud)

它应该打印:2

我尝试过的:

awk '/PATTERN/{print $0}' file | wc-l
Run Code Online (Sandbox Code Playgroud)

regex awk

1
推荐指数
1
解决办法
64
查看次数

我什么时候需要使用$来引用Bash中的变量?

例如,我的代码中有时会这样做

$var
Run Code Online (Sandbox Code Playgroud)

有时我只是这样做

var
Run Code Online (Sandbox Code Playgroud)

这是一个更具体的例子:

upstream() {
    push server_shared_shortname
    ssh $server_shared -t "cd  ~/public_html; git pull -q ~/root.git master"
}
Run Code Online (Sandbox Code Playgroud)

variables bash

1
推荐指数
1
解决办法
121
查看次数

如何使用 set 来更改 shell 变量?

我正在使用 GNU bash,版本 4.3.11(1)-release (x86_64-pc-linux-gnu)。

$set | grep SHELL
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:verbose
Run Code Online (Sandbox Code Playgroud)

现在我想将 SHELL 变量的值更改为 /bin/dash。所以我试过了

$set SHELL=/bin/dash
set SHELL=/bin/dash
$set | grep SHELL
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor:verbose
_=SHELL=/bin/dash
Run Code Online (Sandbox Code Playgroud)

我还尝试了其他几种语法。但是 SHELL 变量值不会改变。我有两个问题: 1.如何使用set来改变SHELL变量 2.什么是_=SHELL=/bin/dash?

linux bash shell

1
推荐指数
1
解决办法
1720
查看次数

如何在Unix Korn Shell中打印函数内部的参数值

我正在尝试在函数内打印一个值.但它不起作用; 它正在打印变量名称.这是我的代码:

#!/bin/ksh
MyVariable=""

function ValidateVariableValue
{
   eval $1="Working!"
   echo "$1"  #Here is printing the value "MyVariable" instead of "Working!"
}

ValidateVariableValue MyVariable

echo "value is: ${MyVariable}" #Here is printing the correct value that is "Working!"
Run Code Online (Sandbox Code Playgroud)

你知道怎么打印函数里面的值吗?

unix variables shell ksh function

1
推荐指数
1
解决办法
308
查看次数

调用多个Bash别名

我想使用一个命令在终端的三个新终端上打开三个不同的文件夹.所有这些都应该彼此独立运行,这意味着一个命令不依赖于它之前的命令.

这是我的.bash_aliases,它是从.bashrc调用的

alias cmd1=gnome-terminal && cd ~/Desktop/

alias cmd2=gnome-terminal && cd ~/Documents/

alias cmd3=gnome-terminal && cd ~/Music/

alias runcmds='cmd1 & cmd2 & cmd3'
Run Code Online (Sandbox Code Playgroud)

但这会在Music目录中打开三个终端,并且不会正确执行命令.我怎样才能使runcms彼此分开运行所有3个命令?

此外,我什么时候需要使用引号,什么时候不需要?

linux bash terminal ubuntu .bash-profile

1
推荐指数
1
解决办法
141
查看次数

在centos Linux中递归清除文件内容

我有一个类似结构的许多网站的日志文件/var/www/domainname.com/log/access.log,我希望清除他们的内容.我需要找到一种方法在一个命令中执行它,但我似乎没有这样做,我尝试过

find /var/www/ -type f -name "access.log" -exec cat /dev/null > access.log {} \;
Run Code Online (Sandbox Code Playgroud)

但这实际上会创建一个新的access.log文件,复制所有网站的所有访问日志文件的内容.

linux truncate centos

1
推荐指数
1
解决办法
331
查看次数

将多个命令的输出重定向到文件

我在Linux Shell中同时运行多个命令,例如

echo "Line of text 1" && echo "Line of text 2" && complexthing | xargs printf "complexspecifier"
Run Code Online (Sandbox Code Playgroud)

我想将所有输出重定向到file1。我知道我可以>file1在每个单独的命令之后添加,但这似乎很庞大。我怎样才能做到这一点?

bash shell command-line command output

1
推荐指数
2
解决办法
1247
查看次数

将字符串匹配到Bash中的多个globs

我正在尝试简化我的Bash 4脚本.我正在读取文件中的行,我想排除与某些子字符串匹配的行:

while read p; do
    if [[ $p != *-ext ]]; then
        if [[ $p != *-backend ]]; then
                if [[ $p != *-vip ]]; then
                    echo $p
                fi
            fi
        fi
    fi
done < $hostsfile
Run Code Online (Sandbox Code Playgroud)

因此,如果该行不以-ext或-backend或-vip结尾,则打印它.什么是一种更简单的方法(单行程不链接&&'s)来实现这一目标?

bash

1
推荐指数
1
解决办法
113
查看次数