标签: awk

基于具有AWK的列数过滤行

我有包含单列和两列的数据行.我想要做的是提取只包含2列的行.

0333 foo
 bar
23243 qux
Run Code Online (Sandbox Code Playgroud)

只屈服:

0333 foo
23243 qux
Run Code Online (Sandbox Code Playgroud)

请注意,它们是制表符分隔的,即使对于只有一列的行,您在开头有选项卡.

这样做的方法是什么?

我试过这个却失败了:

awk '$1!="";{print $1 "\t" $2}' myfile.txt

enter code here
Run Code Online (Sandbox Code Playgroud)

unix linux bash awk

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

在awk或sed中将十六进制转换为十进制

我有一个以逗号分隔的数字列表:

123711184642,02,3583090366663629,639f02012437d4
123715942138,01,3538710295145500,639f02afd6c643
123711616258,02,3548370476972758,639f0200485732
Run Code Online (Sandbox Code Playgroud)

我需要将第3列拆分为3,如下所示:

123711184642,02,3583090366663629,639f02,0124,37d4
123715942138,01,3538710295145500,639f02,afd6,c643
123711616258,02,3548370476972758,639f02,0048,5732
Run Code Online (Sandbox Code Playgroud)

并将最后两列中的数字转换为十进制:

123711184642,02,3583090366663629,639f02,292,14292
123715942138,01,3538710295145500,639f02,45014,50755
123711616258,02,3548370476972758,639f02,72,22322
Run Code Online (Sandbox Code Playgroud)

awk hex sed decimal

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

使用awk计算记录数

我想通过awk计算表中的所有记录,但是NR打印所有记录的记录,而不是总计数.我甚至尝试过:

NF==4,count++{print count}
Run Code Online (Sandbox Code Playgroud)

但它不能正常工作我怎么能通过awk做到这一点?

awk

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

如何在带有SED或AWK的行中添加双引号?

我有一个单词列表

name,id,3
Run Code Online (Sandbox Code Playgroud)

我需要像这样双引号

"name,id,3"
Run Code Online (Sandbox Code Playgroud)

我试过sed的/.*/\"&\"/g',得到了

"name,id,3
Run Code Online (Sandbox Code Playgroud)

只有一个双引号

我也试过awk {print"\""$ 1"\""},结果完全相同需要帮助

shell awk command-line text-processing sed

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

如何导出当前日期和时间并附加到包含"Hello"的每一行的末尾

我有以下文件party.txt,其中包含以下内容:

Hello Jacky
Hello Peter
Bye Johnson
Hello Willy
Bye Johnny
Hello Mary
Hello Wendy
Run Code Online (Sandbox Code Playgroud)

我用它grep hello来捕获包含但是当我使用print date +"%Y-%m-%d'它并附加到它时,我不能和我0每行会得到很多.

cat party.txt | grep Hello | awk '{ print date +"%Y-%m-%d"}'
Run Code Online (Sandbox Code Playgroud)

我能错过什么?

awk grep date

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

awk中的整数除法

我想awk使用整数除法将两个数字分开,即截断结果.例如

k = 3 / 2
print k
Run Code Online (Sandbox Code Playgroud)

应该打印 1

根据手册,

师; 因为awk中的所有数字都是浮点数,结果不会舍入为整数

有没有解决方法来获取整数值?

原因是我想得到一个带有整数索引[0到num-1] 的数组的中间元素.

awk integer division

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

使用空格将字符串(存储在变量中)拆分为多个单词,而不是双引号内的空格

我正在尝试为我编写一个复杂的脚本,我的目标是执行以下操作.我有一个字符串进来,看起来像这样:

2012 2013 "multiple words"
Run Code Online (Sandbox Code Playgroud)

我的目标是将每个这些放入由空格分割的数组中,但仅用于单个字匹配,而不是用双引号括起来的那些.那些应该被认为是一个词.所以我的想法是分两步完成.首先匹配那些是倍数的单词,从字符串中删除那些,然后在由空格分割的另一个迭代中.
很遗憾,我无法找到有关如何进行echo比赛的帮助.到目前为止我有这个:

array=$(echo $tags | sed -nE 's/"(.+)"/\1/p')
Run Code Online (Sandbox Code Playgroud)

但这会导致(在OS X上):

2012 2013 multiple words
Run Code Online (Sandbox Code Playgroud)

预期结果:

array[1]="2012"
array[2]="2013"
array[3]="multiple words"
Run Code Online (Sandbox Code Playgroud)

我该如何处理这类问题?

谢谢.

bash awk sed

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

用awk计算平均值和标准差

我有一个'file.dat',包含24(行)x 16(列)数据.

我已经测试了以下awk脚本来计算每列的平均值.

touch aver-std.dat
awk '{   for (i=1; i<=NF; i++) { sum[i]+= $i } }
END { for (i=1; i<=NF; i++ )  
{ printf "%f \n", sum[i]/NR} }' file.dat >> aver-std.dat
Run Code Online (Sandbox Code Playgroud)

输出'aver-std.dat'有一列具有这些平均值.

与平均计算类似,我想计算数据文件'file.dat'的每列的标准偏差,并将其写入输出文件的第二列.即我想要一个输出文件,其中第一列中的平均值和第二列中的标准差.

我一直在进行不同的测试,比如这个

touch aver-std.dat
awk '{   for (i=1; i<=NF; i++) { sum[i]+= $i }}
END { for (i=1; i<=NF; i++ )  
{std[i] += ($i - sum[i])^2 ; printf "%f %f \n", sum[i]/NR, sqrt(std[i]/(NR-1))}}' file.dat >> aver-std.dat
Run Code Online (Sandbox Code Playgroud)

它会在第二列中写入值,但它们不是标准差的正确值.偏差的计算不正确.我非常感谢任何帮助.问候

awk

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

是否可以在同一行中打印awk输出

awk输出看起来像:

awk '{print $2}'
toto
titi
tata
Run Code Online (Sandbox Code Playgroud)

我想在同一行中以空格作为分隔符而不是新行来显示awk的输出

awk [option] '{print $2}'
toto titi tata
Run Code Online (Sandbox Code Playgroud)

有可能吗?

linux bash shell awk

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

我可以删除 awk 中的字段吗?

这是test.txt

0x01,0xDF,0x93,0x65,0xF8
0x01,0xB0,0x01,0x03,0x02,0x00,0x64,0x06,0x01,0xB0
0x01,0xB2,0x00,0x76
Run Code Online (Sandbox Code Playgroud)

如果我运行 awk -F, 'BEGIN{OFS=","}{$2="";print $0}' test.txt 结果是:

0x01,,0x93,0x65,0xF8
0x01,,0x01,0x03,0x02,0x00,0x64,0x06,0x01,0xB0
0x01,,0x00,0x76
Run Code Online (Sandbox Code Playgroud)

$2 没有被删除,它只是变空了。我希望在打印 $0 时,结果是:

0x01,0x93,0x65,0xF8
0x01,0x01,0x03,0x02,0x00,0x64,0x06,0x01,0xB0
0x01,0x00,0x76
Run Code Online (Sandbox Code Playgroud)

awk cut sed

19
推荐指数
3
解决办法
1116
查看次数

标签 统计

awk ×10

sed ×4

bash ×3

linux ×2

shell ×2

command-line ×1

cut ×1

date ×1

decimal ×1

division ×1

grep ×1

hex ×1

integer ×1

text-processing ×1

unix ×1