如果某个角色出现在某个位置,则提取整行

时间:2017-04-25 14:25:58

标签: linux shell unix

我是一名java程序员和shell脚本的新手,我有一项令人生畏的任务,即解析多GB的日志,并寻找在第446位置出现' 1'(只有1无qoutes)的行。该行,我能够通过运行此cat *.log | cut -c 446-446 | sort | uniq -c验证字符1是否存在,但我无法提取行并将其打印在输出文件中。

4 个答案:

答案 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