我有一个名为 test.out 的文件,其中包含以下几行:
-rw-rw---- 1 informix informix 9117025 Jan 21 05:22 shop4_0_Log0000331875.Z
-rw-rw---- 1 informix informix 8897981 Jan 21 05:24 shop4_0_Log0000331876.Z
-rw-rw---- 1 informix informix 9325351 Jan 21 05:31 shop4_0_Log0000331877.Z
-rw-rw---- 1 informix informix 9645109 Jan 21 05:34 shop4_0_Log0000331878.Z
-rw-rw---- 1 informix informix 9950581 Jan 21 05:40 shop4_0_Log0000331879.Z
-rw-rw---- 1 informix informix 10655940 Jan 21 05:59 shop4_0_Log0000331880.Z
-rw-rw---- 1 informix informix 10832325 Jan 21 06:39 shop4_0_Log0000331881.Z
-rw-rw---- 1 informix informix 8521443 Jan 21 07:42 shop4_0_Log0000331882.Z
-rw-rw---- 1 informix informix 10283566 Jan 21 08:02 shop4_0_Log0000331883.Z
-rw-rw---- 1 informix informix 10633957 Jan 21 08:51 shop4_0_Log0000331884.Z
我想打印 grep 值 331881 参数以上的所有行:
我想要的结果必须如下所示:
-rw-rw---- 1 informix informix 9117025 Jan 21 05:22 shop4_0_Log0000331875.Z
-rw-rw---- 1 informix informix 8897981 Jan 21 05:24 shop4_0_Log0000331876.Z
-rw-rw---- 1 informix informix 9325351 Jan 21 05:31 shop4_0_Log0000331877.Z
-rw-rw---- 1 informix informix 9645109 Jan 21 05:34 shop4_0_Log0000331878.Z
-rw-rw---- 1 informix informix 9950581 Jan 21 05:40 shop4_0_Log0000331879.Z
-rw-rw---- 1 informix informix 10655940 Jan 21 05:59 shop4_0_Log0000331880.Z
使用下面的命令,我可以指定上面要打印的行数:
grep -n 331881 test.out | cut -d':' -f1 | xargs -n1 -I % awk "NR<=%+0 && NR>=%-1" test.out | sed '$d'
在这种情况下,上面的命令将只打印指定数量的行 1 行,但我想将上面的内容更改为打印 grepped 行以上的所有内容。我正在努力寻找解决问题的方法或更简单的方法。
假设您位于包含列出的文件的目录中,请使用
zsh
:<331882->
是一个特定的zsh
glob,它匹配 331882 或更大的整数。使用其他外壳:
在这里,我们遍历以 开头
shop4_0_Log
和结尾的名称.Z
。对于每个这样的名称,我们选择文件名的整数部分,如果它是 331882 或更多,我们调用ls -ld
该名称。如果前导零导致 shell 将某些数字解释为八进制(在我的测试中没有),则
10#$number
在测试中使用强制将数字解释为十进制整数(这由ksh
andbash
和一些支持其他贝壳)。这两种变体都不依赖于包含某些
ls
输出的文本文件的存在。有关的:
我认为您可以直接使用 awk :
这将打印所有行,但对于匹配的行
331881
,退出。另一个好工具是
sed
:尝试删除
and
条件,从您的一个衬里中删除以下代码:输出