我是一名java程序员和shell脚本的新手,我有一项令人生畏的任务,即解析多GB的日志,并寻找在第446位置出现' 1'(只有1无qoutes)的行。该行,我能够通过运行此cat *.log | cut -c 446-446 | sort | uniq -c
验证字符1是否存在,但我无法提取行并将其打印在输出文件中。
答案 0 :(得分:2)
awk '{if (substr($0,446,1) == "1") {print $0}}' file
是基础。
您可以在打印功能中使用FILENAME
将文件名添加到输出中,这样就可以了
awk '{if (substr($0,446,1) == "1") {print FILENAME ":" $0}}' file1 file2 ...
IHTH
答案 1 :(得分:1)
您可以使用awk命令:
#include <conio.h>
#include <Windows.h>
int main()
{
OpenClipboard(GetForegroundWindow());
_getch();
return 0;
}
awk 'substr($0, 446, 1) == "1"' file.log
函数会在substr
位置获得1个字符,而446
将确保该字符为== "1"
。
答案 2 :(得分:1)
尝试将grep添加到管道中:
grep '^.\{445\}1.*$'
答案 3 :(得分:1)
awk中的另一个人。为了使一个更健全的例子,我们打印第三个字符为3的行:
$ cat file
123 # this
456 # not this
$ awk -F '' '$3==3' file
123 # this
基于该示例但未经测试:
$ awk -F '' '$446==1' file