gpt4 book ai didi

用于配置 grep 输出的 Perl 脚本

转载 作者:行者123 更新时间:2023-11-29 09:24:13 24 4
gpt4 key购买 nike

我有一个以下列格式的竖线分隔日志文件:

<date>  <time> | <fruit> | <color> | <num_1> | <num_2> | <num_3>

例如:

2013-03-27  23:01:52 | apple | green | 55 | 120 | 29
2013-03-27 23:01:56 | plumb | purple | 28 | 1 | 394
2013-03-27 23:01:59 | apple | red | 553 | 21 | 7822

我想写一个 perl 脚本(虽然 python 或 bash 也可以接受)greps<date><time>字段(第 1 列)和 <num_1> , <num_2><num_3> ,取决于您给脚本的输入。因此运行 perl extract.pl 2就以上信息给你<date> , <time><num_2> :

2013-03-27  23:01:52 | 120
2013-03-27 23:01:56 | 1
2013-03-27 23:01:59 | 21

我尝试了以下方法,但它似乎不起作用:

#!/usr/bin/perl

use warnings;
use strict;

my $col = $1;

print `grep "myapplog.txt" "m/_(\d{4})(\d\d)(\d\d)/ | $col"`

在这里,我设置了 col var 到脚本的第一个 arg,然后尝试打印与第一列的日期时间和期望 <num_X> 相匹配的 grep柱子。有任何想法吗?提前致谢。

最佳答案

尝试在 awk 模式下使用 perl

$ perl -F'\|' -lane 'print $F[0]," | ", $F[4]' input
2013-03-27 23:01:52 | 120
2013-03-27 23:01:56 | 1
2013-03-27 23:01:59 | 21

纯 awk:

awk -F"|" '{print $1, "|", $5}' input

纯 bash:

#!/bin/bash

IFS="|"

while read -a ARRAY;
do
echo ${ARRAY[0]} "|" ${ARRAY[4]}
done < input

更新

通行证awk 解决方案的参数以确定要打印的女巫列,使用:

$ awk -vcol="5" -F"|" '{print $1, "|", $col}' input

在 bash 中,函数/脚本的第一个参数位于 $1 中,因此将其用作 ARRAY 的索引。

比单行更正式的东西,使用 python:

#!/usr/bin/env python

import sys

col = raw_input('which column to print? -> ')
try:
col = int(col)
except ValueError:
print >> sys.stderr, "That was no integer"

with open("input") as fd:
for line in fd:
tmp = line.strip().split('|')
print tmp[0], "|", tmp[col]

关于用于配置 grep 输出的 Perl 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15796783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com