标签: awk

从 grep 结果中提取子字符串

给定一个日志文件,我通常会做这样的事情:

grep 'marker-1234' filter_log
Run Code Online (Sandbox Code Playgroud)

在模式中使用 '' 或 "" 或不使用有什么区别?

上面的 grep 命令将产生数千行;我想要什么。在这些行中,我通常需要一大块数据。有时,我使用 awk 打印出我想要的字段。在这种情况下,日志格式发生变化,我不能完全依赖位置,更何况实际记录的数据可以推动位置。

为了便于理解,假设日志行包含一个 IP 地址,这就是我所追求的全部内容,因此我可以稍后将其通过管道进行排序和唯一并获得一些计数。

一个例子可能是:

2010-04-08 some logged data, indetermineate chars - [marker-1234] (123.123.123.123) from: foo@bar.example.com to bar@foo.example.com [stat-xyz9876]
Run Code Online (Sandbox Code Playgroud)

第一个 grep 命令会给我像上面那样的数千行,从那里,我想把它输送到某个东西,可能是sed,它可以在里面拉出一个模式,然后只打印这个模式。

对于此示例,使用 IP 地址就足够了。我试过。是sed无法理解[0-9] {1,3}。作为一种模式?我不得不[0-9][0-9][0-9]。这产生了奇怪的结果,直到创建了整个模式。

这不是特定于 IP 地址,模式会改变,但我可以将其用作学习模板。

谢谢你们。

grep awk sed

4
推荐指数
1
解决办法
2万
查看次数

如何在 Linux 中使用“ls -al”结果移动文件?

如何编写脚本以根据上次修改日期将文件从一个目录复制到另一个目录?

ls -al

-rw-R - R-- 1个用户的用户100 2011-05- 26 12点33 ABC1234 _frontcover_10344000_2011-05.doc

我到底想要做的是,使用 ls -al 结果的上述粗体部分ABC1234_frontcover_10344000_2011-05.doc应该将文件复制到/home/abcd/ABC1234/2011-05/26/.

应该有一些方法可以使用date -r $file +%mand 的值来做到这一点basename *.doc | awk -F_ '{print $1}'。帮帮我,怎么样?

linux bash awk

4
推荐指数
1
解决办法
895
查看次数

输出出现2次以上的项目

如何选择出现 4 次或更多的 ip,例如这里?

输入文件是

192.168.1.28
192.168.1.100
192.168.1.31
192.168.101.2
192.168.1.31
192.168.11.02
192.168.1.31
192.168.1.28
192.168.1.28
192.168.1.31
192.168.21.31
192.168.1.28
192.168.1.31
Run Code Online (Sandbox Code Playgroud)

然后我想得到这个输出:

192.168.1.28
192.168.1.31  
Run Code Online (Sandbox Code Playgroud)

首选使用 AWK

谢谢你们!:)

bash shell awk bash-scripting

4
推荐指数
2
解决办法
6541
查看次数

Unix - 用双引号包围 CSV 的第一列

我有以下格式的数据 -

4,"abc"
8,"def"
9,"ghi"
Run Code Online (Sandbox Code Playgroud)

我想用双引号将第一列的值括起来。

"4","abc"
"8","def"
"9","ghi"
Run Code Online (Sandbox Code Playgroud)

我怎么做 ?

unix csv awk sed

4
推荐指数
1
解决办法
9543
查看次数

linux - 用空格替换所有双换行符

是否可以使用 sed、awk、grep、tr 或任何需要的东西只替换文本文件中的双换行符?

this

is

data
this

is

more

data
Run Code Online (Sandbox Code Playgroud)

我需要做的是用空格替换所有双换行符(\n\n,没有空格),但保留所有单换行符,以使我的所有数据点都在自己的行上。

this is data
this is more data
Run Code Online (Sandbox Code Playgroud)

这可能吗?

linux bash awk sed

4
推荐指数
2
解决办法
4162
查看次数

如何查找大小范围内的文件?

请建议我使用命令查找大小zip大于60 MB但小于70 MB大小的所有文件的方法find

linux bash grep awk find

4
推荐指数
2
解决办法
1万
查看次数

使用 awk 命令观看

你如何看待一个命令?

awk 'NR%2==0 {printf "%s %8.0f", $1, $5}' filename.txt
Run Code Online (Sandbox Code Playgroud)

在此之前加上“watch”给出了这个错误:

awk: cmd. line:1: fatal: cannot open file `{printf' for reading (No such file or directory)
Run Code Online (Sandbox Code Playgroud)

答案是:使用带有引号的参数的 watch 命令是通过将 $ 符号替换为 \$ 来对 $ 符号进行转义。但这给了我错误:

sh: -c: line 0: syntax error near unexpected token `('
                                                      sh: -c: line 0: 
Run Code Online (Sandbox Code Playgroud)

我想在对该问题的评论中提出这个问题,但没有足够的分数来发表评论。

在这种情况下,对他们有用的答案不起作用的类似问题:

1)https://askubuntu.com/questions/500217/how-to-properly-quote-piped-command-for-watch(答案再次转义$符号)。
2)、3) 和 4) 列在评论中,因为我不能在没有 10 点声誉的情况下发布超过 2 个链接。

linux bash awk command-line watch

4
推荐指数
1
解决办法
5357
查看次数

删除 Linux 中的非重复行

如何使用任何 linux 程序链接 sed、awk 或任何其他程序从文本文件中删除非重复行?

例子:

abc
bbc
abc
bbc
ccc
bbc
Run Code Online (Sandbox Code Playgroud)

结果:

abc
bbc
abc
bbc
bbc
Run Code Online (Sandbox Code Playgroud)

第二个列表已删除 ccc,因为它没有重复的行。

是否也可以删除只有 2 个重复行的非重复 AND 行,并留下那些有超过 2 个重复行的行?

linux awk text-manipulation uniq

4
推荐指数
2
解决办法
5133
查看次数

使用 sed 压缩 JSON 数组

我有以下格式的 JSON 输出:

{
  "DaysCfg": {
    "Range": {
      "lowerDate": "2017-07-28T00:00:00.000-04:00",
      "upperDate": "2017-08-04T00:00:00.000-04:00"
    },
    "DaysInPeriod": 8,
    "DaysToSchedule": [
      0,
      1,
      2,
      3,
      4,
      5,
      6
    ]
  },
  "DepartmentsID": [
    138837,
    139734,
    141934,
    142436,
    149687,
    151049
  ],
  "EmployeesID": [
    5039,
    5170,
    5889,
    6051,
    6236,
    7208,
    7281,
    8776,
    8781,
    8936,
    9261
  ],
  "EndDate": "2017-08-03T23:59:00.000-04:00",
  "IntervalSize": 15,
  "IsActivitiesEnabled": true,
  "ModifyExisting": false,
  "OrignId": 134721,
  "PrimaryOption": 0,
  "SchoolDays": [],
  "ScChanges": [],
  "StartDate": "2017-07-28T00:00:00.000-04:00",
  "ZonesToSchedule": [
    5,
    4,
    6,
    3,
    3,
    3,
    2,
    14
  ]
}
Run Code Online (Sandbox Code Playgroud)

由于我无法更改输出它的程序,因此我必须自己使用 …

linux awk sed json ubuntu

4
推荐指数
1
解决办法
869
查看次数

如何使用bash从大文本文件中删除行

我的 CentOS 中有一个巨大的文本文件(日志文件),我想删除其中的顶部部分,每天可能有几千行。(或者可能只是分成两部分)

我搜索了这个站点,发现大多数使用 grep、sed 来删除行但输出到另一个文件。不确定是否有可能使用 shell 脚本(bash)来更新文件?代替:

sed current file > new file
cp new file > current file
Run Code Online (Sandbox Code Playgroud)

谢谢!

bash grep awk sed

3
推荐指数
2
解决办法
6854
查看次数

标签 统计

awk ×10

bash ×6

linux ×6

sed ×5

grep ×3

bash-scripting ×1

command-line ×1

csv ×1

find ×1

json ×1

shell ×1

text-manipulation ×1

ubuntu ×1

uniq ×1

unix ×1

watch ×1