标签: awk

文本中的每一行重复 n 次

我有一个看起来像这样的文件

888
924
873
1374
.....
Run Code Online (Sandbox Code Playgroud)

这些点表示我还有更多的字符串,大约 3000 个。我想重复每个字符串 n 次,得到这样的东西;

888
888
888
924
924
924
873
873
873
....
Run Code Online (Sandbox Code Playgroud)

我尝试编写一个小的 bash 代码:

#! bin/bash

while IFS= read -r line

do 
    awk 'NR==line'
    awk 'NR==line'
    awk 'NR==line'
done < /<PATH_TO_FILE>
Run Code Online (Sandbox Code Playgroud)

但我没有得到任何结果。我认为这是一项相当简单的任务,但显然我错过了一些东西。有什么建议吗?

command-line bash awk

3
推荐指数
1
解决办法
6876
查看次数

sed 删除最后两个数字

我有以下内容。

oid=.1.3.6.1.4.1.795.2.5.0.xxx (these 0.xxx represent any random numeral)
Run Code Online (Sandbox Code Playgroud)

我想做以下事情

echo $oid | sed (some commands to remove 0.xxx)
Run Code Online (Sandbox Code Playgroud)

并存储结果字符串

.1.3.6.1.4.1.795.2.5
Run Code Online (Sandbox Code Playgroud)

在 oid。

我不介意用 Grep、awk 或 sed 来完成。
0.xxx 之前的一切都可以改变,只有静态的东西会是 0。
谢谢你的帮助!

bash scripts grep sed awk

3
推荐指数
1
解决办法
1538
查看次数

在 x 时间间隔内根据时间戳处理文件记录

我有一个文件,其中的一部分作为示例,如下所示,其中包含一个时间戳字段:

20161203001211,00
20161203001200,00
20161203001500,102
20161203003224,00
20161203001500,00
20161203004211,00
20161203005659,102
20161203000143,103
20161202001643,100
....
Run Code Online (Sandbox Code Playgroud)

我想根据时间戳处理此文件,以计算 15 分钟间隔内的发生次数。我知道如何每分钟都这样做,我也使用awk脚本在 10 分钟的间隔内完成,但不知道如何才能在 15 分钟的间隔内获得以下输出:

startTime-endTime             total SUCCESS FAILED    
20161203000000-20161203001500 5     3       2
20161203001500-20161203003000 2     1       1
20161203003000-20161203004500 2     2       0
20161203004500-20161203010000 1     0       1
20161202000000-20161202001500 0     0       0
20161202001500-20161202003000 1     0       1
....
Run Code Online (Sandbox Code Playgroud)

00 表示成功,其他情况表示失败记录。

是的,它是 24 小时,所以一天中的每个小时都应该打印 4 条间隔记录。

python command-line perl awk text-processing

3
推荐指数
1
解决办法
737
查看次数

awk:(有条件的)打印到 gzip 的管道输出

考虑这个文件:

#!/usr/bin/env bash
cat > example_file.txt <<EOL
group, value
1, 3.21
1, 3.42
1, 3.5
2, 4.1
2, 4.2
EOL
Run Code Online (Sandbox Code Playgroud)

在下面的脚本中,我根据第一列中的值(第一列中的值已经排序)对这个文件的行进行分组,并将每个组打印到一个单独的 txt 文件中:

var=$(echo 'example_file.txt')
var2=$(echo $var|sed "s/.txt//g")
mkdir -p output
cat $var | awk -v varn="$var2" -F, 'FNR == 1 {header = $0;next} !seen[$1]++ { print header > ("output/"varn"_"$1".txt") }{print > ("output/"varn"_"$1".txt");}'
Run Code Online (Sandbox Code Playgroud)

如何将结果打印到压缩流"output/"varn"_"$1".gz"(而不是未压缩的 txt 文件"output/"varn"_"$1".txt")?

(因此所需的输出与现在脚本生成的输出相同,只有我希望输出的文件被压缩并保存到.txt.gz而不是像代码现在那样的纯文本文件)。

(我尝试gzip >{print}块内使用但无济于事:(

(PS 我有点像 awk 菜鸟,所以这个问题可能是一个非常愚蠢的问题。)

command-line bash awk

3
推荐指数
1
解决办法
3139
查看次数

将 AWK 下载到 Ubuntu

如何下载awk到 Ubuntu,因为我尝试使用asorti函数并且它告诉我这个asorti. 我尝试了许多使用asorti函数的脚本,但出现了同样的错误!

bash awk

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

使用 awk 和分隔符拆分字符串

我有日志文件,如:

1::
10::
127.0.0.1
172.17.1.1
Run Code Online (Sandbox Code Playgroud)

我希望 awk 将字符串拆分为 :: 分隔符上的列。就像是 :

awk {print$1}
Run Code Online (Sandbox Code Playgroud)

结果:

1
Run Code Online (Sandbox Code Playgroud)

awk {print$2}
Run Code Online (Sandbox Code Playgroud)

结果:

10
Run Code Online (Sandbox Code Playgroud)

awk {print$3}
Run Code Online (Sandbox Code Playgroud)

结果:

127.0.0.1
172.17.1.1
Run Code Online (Sandbox Code Playgroud)

我不知道如何用带有分隔符 :: 的 awk 拆分。

log awk

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

如何合并来自两个不同文本文件的值?

我在文本文件中有以下数据集:

文件1.txt

a1:b1
a2:b2
a3:b3
a4:b4
a5:b5
Run Code Online (Sandbox Code Playgroud)

文件2.txt

b2:c1
b4:c2
b5:c3
Run Code Online (Sandbox Code Playgroud)

如何合并这些值以制作这样的输出文件:

输出.txt

a2:c1
a4:c2
a5:c3
Run Code Online (Sandbox Code Playgroud)

bash awk text-processing

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

如何在带有 awk 的 shell/终端中使用 for 循环?

命令

dpkg -l | awk '$2=="ufw" {sub("ubuntu[^[:alpha:]]*$", "", $3); print $3"\t"$2}'
Run Code Online (Sandbox Code Playgroud)

输出:

0.34~rc-0   ufw
Run Code Online (Sandbox Code Playgroud)

现在$2=="ufw",我不想像那样指定包名,而是想迭代并获取所有包的列表,如下所示:

2.20.1-5.1   util-linux
1.0.2-1  zerofree
0.34~rc-0   ufw
Run Code Online (Sandbox Code Playgroud)

编辑
自己犯了一个语法错误。我应该直接使用相同的命令,删除$2=="ufw". 答案是dpkg -l | awk '{sub("ubuntu[^[:alpha:]]*$", "", $3); print $3"\t"$2}'

command-line dpkg awk text-processing

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

如何从文件中搜索和剪切字符串?

我正在尝试编写一个带有类似选项和参数的程序:

./program.sh -f <filename> -string <string>
Run Code Online (Sandbox Code Playgroud)

该程序应该输出<filename>其开头的行,<string>如下所示:

 grep ^<string> <filename> 
Run Code Online (Sandbox Code Playgroud)

另外,它应该返回一些与字符串相关的信息,例如以下示例输入文件中的姓名和年龄:

string name age sex
Akdk john 22 male
Jrtkfp miah 26 female
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这样的行为?

command-line bash sed awk text-processing

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

如何使用 grep 匹配带有空格的字符串?

谁能帮我这个:

我试图通过匹配字符串来提取时间戳。为此,我使用了 grep/awk 命令的组合。由于刺痛在 [1] 之前有 4 个 spces,在 [1] 之后有 1 个,我很困惑如何解决它。我是编程新手,所以在这里需要一些帮助。

IS="$(grep 'Starting    [1] TaskInit' process.log |  awk '{print $4}')"
echo "$IS"
Run Code Online (Sandbox Code Playgroud)

目的:它应该匹配 process.log 文件中的字符串,并且应该打印出与该行相关的时间戳。

command-line bash grep awk

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

标签 统计

awk ×10

bash ×7

command-line ×6

text-processing ×4

grep ×2

sed ×2

dpkg ×1

log ×1

perl ×1

python ×1

scripts ×1