标签: awk

使用awk或sed连接两个连续的行

我如何使用awk或sed加入两行?

for e.g.:
Run Code Online (Sandbox Code Playgroud)

我的数据看起来像这样:

abcd
joinabcd
efgh
joinefgh
ijkl
joinijkl
Run Code Online (Sandbox Code Playgroud)

我需要一个如下所示的输出:

joinabcdabcd
joinefghefgh
joinijklijkl
Run Code Online (Sandbox Code Playgroud)

unix awk sed

17
推荐指数
3
解决办法
4万
查看次数

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

在多个文件中添加缺少的换行符

我有一堆不完整的文件:最后一行缺少EOL字符.

使用任何工具添加换行的最简单方法是什么(awk可能?)?

bash awk newline text-files

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

在sed或awk中大写字符串

我有三种类型的字符串,我想在bash脚本中大写.我认为sed/awk是我最好的选择,但我不确定.考虑到以下要求,最好的方法是什么?

  1. 单词
    例如 taco -> Taco

  2. 由连字符分隔的多个单词,
    例如 my-fish-tacos -> My-Fish-Tacos

  3. 由下划线分隔的多个单词,
    例如 my_fish_tacos -> My_Fish_Tacos

bash awk sed

17
推荐指数
3
解决办法
9512
查看次数

使用awk只抓取字符串中的数字

背景:
我有一个列应该以"描述文本ref12345678"的形式获得用户输入.我有现有的抢参考号码但不幸的是有些用户将其添加不正确,因此而不是脚本,"ref12345678"它可以是"ref 12345678","RF12345678","abcd12345678"或任何变化.当然,错误的格式会破坏一些触发的脚本.现在我无法控制该字段的用户输入,因此我想稍后在管道中创建脚本以获取该数字.

目前我正在剥离字母awk '{gsub(/[[:alpha:]]/, "")}; 1',但替换似乎是一个低效的解决方案.(我知道我也可以这样做sed -n 's/.*[a-zA-Z]//p',tr -d '[[:alpha:]]'但它们基本相同,我想要awk以获得额外的可编程性).

问题是,有没有办法将awk设置为只打印字符串中的数字,或者将字符串设置为字符串中的数字项?(或替代真的是解决这个问题的最有效方法).

总结一下:如何使用awk $ echo "ref12345678"仅打印"12345678"而不进行替换?

regex awk

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

解释awk命令

今天我在网上搜索命令,在模式后打印下两行,我遇到了一个我无法理解的awk命令.

$ /usr/xpg4/bin/awk '_&&_--;/PATTERN/{_=2}' input
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

unix awk

17
推荐指数
4
解决办法
2658
查看次数

将匹配模式的行从一个文件移动到另一个文件

我想将符合特定模式的行从file1移动到file2.类似于在Windows中从一个文件切换到另一个文件的操作

比方说,我希望削减方含所有行bar文件1,然后粘贴到新创建的文件2

输入:

文件1

bla foo bla
bla bar bla
bla aaa bla
bla bar bla
bla foo bla
Run Code Online (Sandbox Code Playgroud)

处理后所需的输出:

文件1

bla foo bla
bla aaa bla
bla foo bla
Run Code Online (Sandbox Code Playgroud)

文件2

bla bar bla
bla bar bla
Run Code Online (Sandbox Code Playgroud)

我试过了什么

grep创建所需的file2但不修改file1

grep 'bar' file1 > file2
Run Code Online (Sandbox Code Playgroud)

sed -i修改所需的file1但不创建file2

sed -i '/bar/d' file1
Run Code Online (Sandbox Code Playgroud)

如果我一个接一个地执行两个命令,我得到了理想的结果.但在这里,我正在寻找一个出于好奇的单行命令,并使脚本更简洁.

非常感谢您的帮助.

linux perl awk grep sed

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

使用awk计算列中单词出现次数

03/03/2014 12:31:21 BLOCK 10.1.34.1 11:22:33:44:55:66

03/03/2014 12:31:22 ALLOW 10.1.34.2 AA:BB:CC:DD:EE:FF

03/03/2014 12:31:25 BLOCK 10.1.34.1 55:66:77:88:99:AA
Run Code Online (Sandbox Code Playgroud)

我试图使用awk在一个命令中计算上面"块"和"访问"一词的出现次数.

我一开始尝试了"阻止"这个词,但我的计数器似乎没有起作用.任何人都可以看到我的代码错在哪里?

awk ' BEGIN {count=0;}  { if ($3 == "BLOCK") count+=1} end {print $count}' firewall.log
Run Code Online (Sandbox Code Playgroud)

linux bash awk

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

删除最后一个空行

我的.csv文件末尾有一个para break.我尝试使用以下命令删除文件末尾的空行.

sed -i '/^$/d' combined.csv
Run Code Online (Sandbox Code Playgroud)

但它不起作用,仍然有一个空白行.我可以使用以下命令删除最后一行.

sed -i '$d' combined.csv
Run Code Online (Sandbox Code Playgroud)

但是有可能在删除它之前检查最后一行是否真的是空的吗?

更新:

我使用以下命令检查每行是否以数字开头.

sed -i '1s/^[^0-9]*//' combined.csv
Run Code Online (Sandbox Code Playgroud)

这仅检查第一行而不是其余行.如何检查文件中的所有行?这可能会解决我的问题.

awk grep sed

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

在gnuplot函数中使用awk或其他shell命令

我想要这样的东西:

file1='logs/last/mydata1.log'
file2='logs/last/mydata2.log'

# declare function that uses awk to reshape the data - does not work :(
sum1(fname)=("<awk '{sum=0; for(i=8;i<=NF;i+=2) sum+=$i; print $1,sum/2}' $fname")
sum2(fname)=("<awk '{sum=0; for(i=9;i<=NF;i+=2) sum+=$i; print $1,sum/2}' $fname")

# plot different columns of my file and awk processed file
plot file1 u 1:2 title "thing A measure 1" w l, \
     file1 u 3:4 title "thing A measure 2" w l, \
     file2 u 1:2 title "thing B measure 1" w l, \
     file2 u 3:4 …
Run Code Online (Sandbox Code Playgroud)

awk gnuplot

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

标签 统计

awk ×10

sed ×5

bash ×3

linux ×3

unix ×3

grep ×2

gnuplot ×1

newline ×1

perl ×1

regex ×1

shell ×1

text-files ×1