这是一些像 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 shell 脚本,它从只留下数字的文本文件中提取数据。这些是我的示例解析数据:
3
4
4
5
6
7
8
8
9
11
Run Code Online (Sandbox Code Playgroud)
我想创建一个像这样的简单文本模式条形图,但对应于这些值:

细节:
n(parsed number) characters high 列适合我。所以在我的例子中左边的第一个条应该是 3 个字符高,第二个 4,第三个 4,第四个 5,依此类推。更准确地说,对于这个例子,一些东西(使用?字符)像:
?
?
??
???
????
?????
??????
???????
?????????
??????????
??????????
??????????
Run Code Online (Sandbox Code Playgroud)
请注意第一(左)列高 3 个字符,最后(右)列高 11 个字符。
带有$字符的相同示例,以使其更具可读性:
$
$
$$
$$$
$$$$
$$$$$
$$$$$$
$$$$$$$ …Run Code Online (Sandbox Code Playgroud) 有时我的 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) 我发现的有关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(程序似乎正在执行,但没有结果:

我的文本文件示例中的每一行(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,但任何其他解决方案都可以.
C语言中的示例程序(无标题):
int main()
{
printf("\nHello World\n");
}
Run Code Online (Sandbox Code Playgroud)
我怎么知道应该包含什么头文件(例如#include <stdio.h>:)?
我有这个示例列表文本文件(每行一个字):
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必须有一些简单的命令或参数扩展来解决这个问题为了我.
删除原始文件排序是可能的,但如果某些方法不需要它就没问题.
可能的用法:
欢迎提出想法.谢谢.
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) 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.out和file2.out。
将每个作业重定向到不同文件的正确方法是什么?
进一步失败的测试:
parallel --files file{}.out "./ClientesActivos-AP-N.sh -t 15" ::: $(seq 0 2)
Run Code Online (Sandbox Code Playgroud) 我正在编写一个与锁定文件一起使用的Windows shell脚本.为了知道某个文件是否被锁定,我正在测试来自SysInternals的Handle*实用程序,根据其文档:
«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文件是否正在使用(锁定)?
也许有人可以给我一些使用句柄的例子.
对不起,但我不知道拼写这个的正确方法.我希望这个例子可以解释我的问题:
$ 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位.是否需要通过数组编程任何循环来获得它,或者有一些更简单的方法?
更多数据: