小编Sop*_*rez的帖子

Linux shell:在数字输出中添加点以使其更具可读性

这是一些像 Word-Count ( wc)这样的数字程序的常见输出:

$ wc MyLongFile.txt -l
985734902867 MyLongFile.txt
Run Code Online (Sandbox Code Playgroud)

我想知道有什么方法可以过滤数字部分,以便变得更具可读性,例如:

985.734.902.867 MyLongFile.txt
Run Code Online (Sandbox Code Playgroud)

许多程序都有一些-h(for human readable) 选项,但是了解一些可以在函数或别名中实现的通用方法会很好……或者至少键入,如果它不是很长的话。

我想该方法需要添加一个.每 3 个数字连接的组,但从右侧开始。

方法不改变非数字部分是优选的。如果可能,请考虑在数字左侧包含字母(或任何其他字符)的可能性,例如:

ls -la
-rw-rw-r-- 1 luis luis  93342519 ene  1 00:22 tmp.txt
Run Code Online (Sandbox Code Playgroud)

到目前为止,我发现的最好的是这个sed命令:

$ wc MyLongFile.txt -l | sed 's/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2.\3/g'
985734902,867 MyLongFile.txt
Run Code Online (Sandbox Code Playgroud)

...但是,正如您所看到的,它只能工作到数千,而且我在sed.

非常感谢你。

linux bash numbers

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

Shell:如何从解析的数据(数字)制作文本模式条形图?

我正在开发一个 Linux 的 Bash shell 脚本,从只留下数字的文本文件中提取数据。这些是我的示例解析数据:

3
4
4
5
6
7
8
8
9
11
Run Code Online (Sandbox Code Playgroud)

我想创建一个像这样的简单文本模式条形图,但对应于这些值:

条形图

细节:

  • 我需要图形图表是垂直的
  • 第一个数字应该出现在左边,最新的数字应该出现在右边
  • A n(parsed number) characters high 列适合我。所以在我的例子中左边的第一个条应该是 3 个字符高,第二个 4,第三个 4,第四个 5,依此类推。

更准确地说,对于这个例子,一些东西(使用?字符)像:

         ?
         ?
        ?? 
       ???
      ????
     ?????
    ??????
   ???????
 ?????????
??????????
??????????
??????????
Run Code Online (Sandbox Code Playgroud)

请注意第一(左)列高 3 个字符,最后(右)列高 11 个字符。
带有$字符的相同示例,以使其更具可读性:

         $
         $
        $$
       $$$
      $$$$
     $$$$$
    $$$$$$
   $$$$$$$ …
Run Code Online (Sandbox Code Playgroud)

bash charts

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

对 shell 脚本进行 Ping:一些数据包丢失,但错误代码 $? 等于零。我怎样才能检测到?

有时我的 DSL 路由器会以这种奇怪的方式出现故障:

luis@balanceador:~$ sudo ping 8.8.8.8 -I eth9
[sudo] password for luis:
PING 8.8.8.8 (8.8.8.8) from 192.168.3.100 eth9: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=69.3 ms
ping: sendmsg: Operation not permitted
64 bytes from 8.8.8.8: icmp_seq=3 ttl=47 time=68.0 ms
ping: sendmsg: Operation not permitted
64 bytes from 8.8.8.8: icmp_seq=5 ttl=47 time=68.9 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=47 time=67.2 ms
ping: sendmsg: Operation not permitted
64 bytes from 8.8.8.8: icmp_seq=8 ttl=47 time=67.2 ms
^C
--- …
Run Code Online (Sandbox Code Playgroud)

shell ping packet-loss

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

在哪里可以找到Windows任务计划程序退出代码列表?

我发现的有关Windows任务计划程序结果的所有内容都只是关于几个代码的简短细节.
有人知道完整清单吗?
例如,我无法找到有关错误代码0xFF的任何内容.

编辑:例如,如果我添加此任务(用于测试名为"Notifu"的命令行程序):

schtasks /create /tn "NotifuTest" /tr "d:\Temporal\Notifu\notifu64.exe /m 'Test'" /sc minute /mo 1 /sd 10/10/2010 /ru "SYSTEM"
Run Code Online (Sandbox Code Playgroud)

已通过命令行验证了相同的命令.
这是结果(抱歉,我的Windows是西班牙语); 注意0xFF(程序似乎正在执行,但没有结果:

在此输入图像描述

windows scheduled-tasks exit-code schtasks.exe

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

如何获取CSV文本文件中特定字段的最大值?

我的文本文件示例中的每一行(CSV,逗号分隔)如下:

2016-01-10,23:56:07,10,71,47
Run Code Online (Sandbox Code Playgroud)

可以看出,字段3,4和5是数值.

对于每一行,我只想获得字段3和4最大值.就像是:

awk -F ',' '{print max($3,$4)}'
Run Code Online (Sandbox Code Playgroud)

(可能不是真正的AWK语法,这个,但它是我能想到的最接近的).
因此,对于上述行,结果数字将为"71".

更多行的示例:

2016-01-10,23:53:07,6,99,41
2016-01-10,23:54:07,10,88,44
2016-01-10,23:55:07,31,71,46
2016-01-10,23:56:07,71,10,47
Run Code Online (Sandbox Code Playgroud)

结果:

99
88
71
71
Run Code Online (Sandbox Code Playgroud)

如何在Linux shell上完成?
我建议AWK,但任何其他解决方案都可以.

linux csv shell awk

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

C:我怎么知道我要使用的功能需要什么标题?

C语言中的示例程序(无标题):

int main()
{
printf("\nHello World\n");
}
Run Code Online (Sandbox Code Playgroud)

我怎么知道应该包含什么头文件(例如#include <stdio.h>:)?

c c-header

3
推荐指数
2
解决办法
96
查看次数

Linux shell脚本:如何删除单词列表文件中的最终数字?

我有这个示例列表文本文件(每行一个字):

John
J0hn
John45
Smith
Sm1th
Jane
Jane333
Doe555
Run Code Online (Sandbox Code Playgroud)

我想获得:

John
J0hn
Smith
Sm1th
Jane
Doe
Run Code Online (Sandbox Code Playgroud)

这是:我想删除单词末尾的数字(注意单词内的数字是允许的)然后删除重复项.
我有一些编程方面的经验,所以我可以实现一些loop/s来检查这些数字,然后另一个loop/s来删除重复的单词,但我认为Linux Shell必须有一些简单的命令或参数扩展来解决这个问题为了我.

删除原始文件排序是可能的,但如果某些方法不需要它就没问题.

可能的用法:

  • 隔离密码数据库中使用的单词(John,45John,12345John)以获得多样性的统计数据.

欢迎提出想法.谢谢.

EDIT-1:在这种"字典"文本文件中不会出现空格(无论如何,谢谢你,@ rottweilers_anonymous).

EDIT-2:添加了一个可能含糊不清的例子,一个只有数字的"单词":必须留下(我知道,我知道,这不是严格意义上的"单词";-)).示例原始文件:

John
J0hn
John45
Smith
Sm1th
Jane
Jane333
Doe555
12345
Run Code Online (Sandbox Code Playgroud)

只要像12345(没有单词的数字)这样的行不是真的number to the end of a word,我想保留它,所以结果必须是:

John
J0hn
Smith
Sm1th
Jane
Doe
12345
Run Code Online (Sandbox Code Playgroud)

linux shell

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

GNU 并行:将每个作业输出到不同的文件而无需管道

This question与this other非常接近,但该答案对我无效,我认为由于我的shell脚本不适用于管道。

这是我的多任务命令:

parallel "./ClientesActivos-AP-N.sh -t 15" ::: $(seq 0 2)
Run Code Online (Sandbox Code Playgroud)

我想输出到类似的东西:

file0.out
file1.out
file2.out
Run Code Online (Sandbox Code Playgroud)

我不知道我应该把重定向器 放在哪里>

我已经测试过没有运气:

parallel ./ClientesActivos-AP-N.sh -t 15 ">" file{}.out ::: $(seq 0 1)
parallel ./ClientesActivos-AP-N.sh -t 15 ::: $(seq 0 1) ">" file{}.out
Run Code Online (Sandbox Code Playgroud)

我的脚本以这种方式工作:

./ClientesActivos-AP-N.sh -t 15 0
./ClientesActivos-AP-N.sh -t 15 1
./ClientesActivos-AP-N.sh -t 15 2
Run Code Online (Sandbox Code Playgroud)

所以输出会(对于上面的手动无与伦比的例子)到file0.out,file1.outfile2.out

每个作业重定向到不同文件的正确方法是什么?

进一步失败的测试:

parallel --files file{}.out "./ClientesActivos-AP-N.sh -t 15" ::: $(seq 0 2)
Run Code Online (Sandbox Code Playgroud)

gnu-parallel

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

SysInternals处理打开时不显示我的.txt文件

我正在编写一个与锁定文件一起使用的Windows shell脚本.为了知道某个文件是否被锁定,我正在测试来自SysInternalsHandle*实用程序,根据其文档:

«Handle是一个实用程序,显示有关系统中任何进程的打开句柄的信息.您可以使用它来查看打开文件的程序»

所以我通过创建一个简单的.txt文件来尝试:

C:\Windows\system32>echo Foo >> Foo.txt
C:\Windows\system32>notepad Foo.txt
Run Code Online (Sandbox Code Playgroud)

(记事本显示在屏幕上,其中包含一个名为的新文件Foo.

C:\Windows\system32>handle Foo

Handle v3.51
Copyright (C) 1997-2013 Mark Russinovich
Sysinternals - www.sysinternals.com

No matching handles found.
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我的文件应该是打开的,记事本应该有一个句柄,但这一行:

handle -p notepad | grep "Foo"
Run Code Online (Sandbox Code Playgroud)

没有结果.
如何使用句柄来了解我的Foo.txt文件是否正在使用(锁定)?
也许有人可以给我一些使用句柄的例子.

windows shell file-io locking handle

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

如何删除数组索引中的"漏洞"?

对不起,但我不知道拼写这个的正确方法.我希望这个例子可以解释我的问题:

$ array[1]=john
$ array[2]=smith
$ array[4]=jane
$ array[5]=doe
$ echo ${array[@]}
john smith jane doe
$ echo ${array[3]}

$
Run Code Online (Sandbox Code Playgroud)

我想要一些方法去除位置3的"洞" array,这样:

  • 价值jane将移至第3位.
  • 价值doe将移至第4位.
  • 位置5的值将变为空(未设置).
  • 数组长度(本例中为4)不会更改.

是否需要通过数组编程任何循环来获得它,或者有一些更简单的方法?

更多数据:

  • 假设Bash为shell.

arrays bash

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