我有一个看起来像这样的文件
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)
但我没有得到任何结果。我认为这是一项相当简单的任务,但显然我错过了一些东西。有什么建议吗?
我有以下内容。
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。
谢谢你的帮助!
我有一个文件,其中的一部分作为示例,如下所示,其中包含一个时间戳字段:
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 条间隔记录。
考虑这个文件:
#!/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 菜鸟,所以这个问题可能是一个非常愚蠢的问题。)
如何下载awk到 Ubuntu,因为我尝试使用asorti函数并且它告诉我这个asorti. 我尝试了许多使用asorti函数的脚本,但出现了同样的错误!
我有日志文件,如:
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 拆分。
我在文本文件中有以下数据集:
文件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) 命令
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}'。
我正在尝试编写一个带有类似选项和参数的程序:
./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)
我怎样才能实现这样的行为?
谁能帮我这个:
我试图通过匹配字符串来提取时间戳。为此,我使用了 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 文件中的字符串,并且应该打印出与该行相关的时间戳。