标签: awk

如何将字符串变量作为参数传递给awk

我有以下命令:

usb_soundcard_sink=$(pactl list short sinks | grep "alsa_output" | awk '{ print $2 }' | tail -n1)
Run Code Online (Sandbox Code Playgroud)

此命令的输出是:

alsa_output.pci-0000_00_1b.0.analog-stereo
Run Code Online (Sandbox Code Playgroud)

这是另一个查找索引号的命令:

var=$(pactl list short sinks | awk '$2=="alsa_output.pci-0000_00_1b.0.analog-stereo" {print $1}')
Run Code Online (Sandbox Code Playgroud)

输出:

0
Run Code Online (Sandbox Code Playgroud)

但我想在上面的命令中传递“usb_soundcard_sink”变量而不是硬编码值,即“alsa_output.pci-0000_00_1b.0.analog-stereo”。“usb_soundcard_sink”变量的 b'coz 值可能会动态变化。

我也尝试了以下方法:

var=$(pactl list short sinks | awk '$2=="$usb_soundcard_sink" {print $1}')
Run Code Online (Sandbox Code Playgroud)

但它不起作用

那么如何将“usb_soundcard_sink”变量的值传递给上述命令

command-line scripts awk

4
推荐指数
2
解决办法
7万
查看次数

像awk一样访问python中的列

这是我的数据文件:

Iam
python
newbie 
Run Code Online (Sandbox Code Playgroud)

如果我使用awk访问列元素,只需$1就很容易。我如何在 python 上访问这个列元素?

python scripts awk

4
推荐指数
1
解决办法
3万
查看次数

列出文件中使用的每个字符的实用方法是什么(Bash)(Regex)

我怎样才能把这个:

Johnny's penguin, (Tuxie), likes the following foods: French fries, and beef.
Run Code Online (Sandbox Code Playgroud)

对此:

 abcdefghiklnoprstuwFJT',():.
Run Code Online (Sandbox Code Playgroud)

(这些是输入中使用的总字符数)

请注意小写字符“jmqvz”不在输入语句中,因此不输出。

顺序并不重要,但小写,然后大写,然后是特殊字符将是首选。

我确定我需要 sed/awk/etc。为此,但经过广泛搜索,我没有发现任何类似的东西。

bash regex sed awk

4
推荐指数
2
解决办法
4678
查看次数

获取特定的 PID 并保存到文件

我在我的机器上运行两个 minecraft 服务器。我想知道正在运行的单个 mc 服务器的 pid 是什么,并将其放入文件,以便我以后可以杀死它。所以对于这个例子,我只想知道 World2 的 PID 是什么,没有别的,并将其保存到文件中。

当我执行命令时

ps h -o pid,cmd -u minecraft 
Run Code Online (Sandbox Code Playgroud)

我得到以下结果

31416 /usr/lib/jvm/java-8-oracle/jre/bin/java -Xmx2G -Xms1G -jar /data/mc-server/World1/minecraft_server.jar nogui
31706 /usr/lib/jvm/java-8-oracle/jre/bin/java -Xmx6G -Xms4G -jar /data/mc-server/World2/craftbukkit.jar nogui
Run Code Online (Sandbox Code Playgroud)

然后我使用这个命令管道到 grep

grep World2
Run Code Online (Sandbox Code Playgroud)

这就是我遇到困难的地方,然后我通过管道获取单个结果。我尝试了以下但无法得到它。

awk '{print $1 > world2.pid}'
Run Code Online (Sandbox Code Playgroud)

所以我的完整命令是:

ps h -o pid,cmd -u minecraft | grep World2 | awk '{print $1 > world2.pid}'
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

awk: cmd. line:1: {print $1 > world2.pid}
awk: cmd. line:1:                 ^ syntax error
Run Code Online (Sandbox Code Playgroud)

grep awk ps

4
推荐指数
2
解决办法
1549
查看次数

Passing Variable into awk gsub

I have this command
Here

vovar=OBJECTS
prvar="$(awk '/'"$vovar"'/,/}/ {gsub("$vovar"," "); gsub("}",": %s,"); gsub("{"," ");gsub(",",": %s,");print}' temp1)"

Contents of temp1

ciscoFlashCopyCompletionTrap NOTIFICATION-TYPE
        OBJECTS   
                { 
                ciscoFlashCopyStatus  
                }
        STATUS  current
        DESCRIPTION
                "A ciscoFlashCopyCompletionTrap is sent at the 
                completion of a flash copy operation if such a trap 
                was requested when the operation was initiated.
                "
        ::= { ciscoFlashMIBTraps 1 }

What I want the command to do

                ciscoFlashCopyStatus  
                : %s: %s,

What it actually does

        OBJECTS   

                ciscoFlashCopyStatus  
                : %s: %s,

How can I …

command-line bash scripts awk

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

我如何计算文件中有多少重复的数字,然后通过重复组织它们?

我有一个需要组织多次重复的文件,我的文件有 6 行 3120 行,每个成员有 1 或 2 位数字,总共 18720 个数字有 1 或 2 位数字。

我想计算我的文件中有多少个 1、多少个 2、多少个 3 等等到多少个 45,并输出组织最多报告的数字以减少重复。例子:

5   7   13  25  26  44
12  21  26  28  32  44
10  20  22  26  40  44
13  18  19  20  22  23
9   15  17  19  22  43
10  19  28  29  37  45
2   8   12  13  22  35
3   23  24  26  38  39
3   14  19  20  33  43
2   3   8   35  36 …
Run Code Online (Sandbox Code Playgroud)

bash awk tr

4
推荐指数
2
解决办法
2634
查看次数

为什么 ls 与 awk 结合不显示确切的大小?

我试图以精确的字节数找到硬盘驱动器上文件的大小,但是每当大小变得太大时,数字就会变得很奇怪(例如 1.98329e+12)。我可以阻止它这样做或将其转换为精确的字节吗?

命令是:

ls -lR | grep -v '^d' | awk '{total += $5} END {print "Total:", total}'
Run Code Online (Sandbox Code Playgroud)

确切字节的图片:

图片

奇怪号码图片:

图片

  • 停止显示确切字节之前的截止点似乎在 500gb 左右
  • du -sb无论目录有多大,该命令都会正确显示确切的字节。
  • 我尝试过 Ubuntu Gnome 15.10 64bit(日语和英语)和 Linux Mint 17.3 Cinnamon 64bit(日语)
  • 我的驱动器是ntfs这样的,所以我尝试将其格式化为 ext4 并复制我的文件。结果与ntfs相同。

command-line files disk-usage ls awk

4
推荐指数
2
解决办法
1301
查看次数

从不一致的文本文件创建csv

我在一个文件中包含结构松散的记录,由 3 或 4 行文本组成(大部分)由空行分隔。并非所有记录都有空行分隔符,但每条记录的最后一行都以“已添加”一词开头。我想生成一个 csv 文件,每条记录在一行上,前面是行号。到目前为止,我只能生成由任意数量的空格和冗余逗号分隔的所有记录的串联。

从逻辑上讲,我试图实现以下目标:

读取行,如果行以“已添加”开头,则在末尾保留换行符,
否则将“换行符”替换为“,”,
或者如果行为空白,则将其删除
endif

样本数据:

Peter Green  
Space Monkey at Area 51  
Joined  
Added by SF 3 weeks ago  
Will Rossiter  
Joined  
Added by SF 3 weeks ago

Dean Matthews  
Guitarist at Blues  
Joined  
Added by SF 3 weeks ago  
Hobbit Mak  
Farnborough, United Kingdom  
Joined  
Added by SF 3 weeks ago  

Keneth W Moorfield  
THE STOREMAN  
Joined  
Added by SF 3 weeks ago  
Mick Georgious  
Software Engineer  
Joined  
Added by SF …
Run Code Online (Sandbox Code Playgroud)

command-line sed awk csv text-processing

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

awk - 舍入到小数点后两位

我正在使用以下 awk 命令计算文件列中每个项目的百分比:

awk '{a[NR]=$2;x+=(b[NR]=$2);c[NR]=$1}END{while(++i<=NR)print c[i]"\t"a[i]"\t"100*b[i]/x"%"}' file.txt > out_file.txt
Run Code Online (Sandbox Code Playgroud)

文件.txt

N    38668442   
V    14008521   
ADJ  16112215   
Run Code Online (Sandbox Code Playgroud)

输出文件.txt

N    38668442   56,213%
V    14008521   20,3644%
ADJ  16112215   23,4226%
Run Code Online (Sandbox Code Playgroud)

但是,我希望 out_file.txt 中的百分比四舍五入为 2 位小数。

所需的 out_file.txt

N    38668442   56,21%
V    14008521   20,37%
ADJ  16112215   23,42%
Run Code Online (Sandbox Code Playgroud)

参考这篇文章:https : //stackoverflow.com/questions/18696096/awk-calculate-sum-of-2nd-column-and-percentage-wrt-sum-and-print

我试图集成printf "%s,%d,%0.2f%\n到我的代码中,即使通过减少参数并将表达式限制为%0.2f%\n.

 awk '{a[NR]=$2;x+=(b[NR]=$2);c[NR]=$1}END{while(++i<=NR)printf "%s,%d,%0.2f%\n",c[i]"\t"a[i]"\t"100*b[i]/x"%"}' file.txt > out_file.txt
Run Code Online (Sandbox Code Playgroud)

bc没有解决。为什么它不产生所需的输出?在我看来,它应该有效,因为我printf "%0.2f\n"在几个关于同一问题的帖子中找到了表达方式。我错过了一些微不足道的东西吗?

我非常感谢任何帮助或建议!

command-line awk

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

使用 awk 或 sed 删除多列

我有一个包含 6037 个空格分隔列和 450 行的数据库,如下所示:

1807 1452 1598 1 6.655713  A B A B ... 0 
1808 1452 1763 1 9.362033  0 0 A B ... A 
1809 1452 1527 2 6.728534  A B A A ... B 
1810 1452 1367 2 9.4055  A B A A B ... A 
... ... ... ... ... ... ... ... ... ...
1812 1452 1258 1 6.363032  0 0 A B ... B
Run Code Online (Sandbox Code Playgroud)

我想获得一个只有前 676 列的新数据库。

最好是使用awksed命令的某种形式。

sed awk text-processing

4
推荐指数
2
解决办法
4290
查看次数

标签 统计

awk ×10

command-line ×5

bash ×3

scripts ×3

sed ×3

text-processing ×2

csv ×1

disk-usage ×1

files ×1

grep ×1

ls ×1

ps ×1

python ×1

regex ×1

tr ×1