标签: awk

如何使用AWK合并两个文件?

文件1有5个字段ABCDE,字段A是整数值

文件2有3个字段AFG

文件1中的行数远大于文件2中的行数(20 ^ 6到5000)

文件1中A的所有条目都出现在文件2的字段A中

我想通过字段A合并这两个文件并携带F和G.

期望的输出是ABCDEFG

档案1

 A     B     C    D    E
4050 S00001 31228 3286 0
4050 S00012 31227 4251 0
4049 S00001 28342 3021 1
4048 S00001 46578 4210 0
4048 S00113 31221 4250 0
4047 S00122 31225 4249 0
4046 S00344 31322 4000 1
Run Code Online (Sandbox Code Playgroud)

档案2

A     F    G   
4050 12.1 23.6
4049 14.4 47.8   
4048 23.2 43.9
4047 45.5 21.6
Run Code Online (Sandbox Code Playgroud)

期望的输出

A    B      C      D   E F    G
4050 S00001 31228 3286 0 12.1 …
Run Code Online (Sandbox Code Playgroud)

unix linux bash awk

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

使用AWK过滤掉具有数字范围的列

我是BASH的新手,我正在尝试使用awk根据文本文件的第4列过滤掉第1列数据.如果第4列数据与x的范围匹配,那么它将输出第1列数据."x"被认为是1-10(1,2,3..10)的数字范围.

awk -F: '{ if($4=="x") print $1}' filename.txt

filename.txt 
sample1 0 0 4
sample2 0 0 10
sample3 0 0 15
sample4 0 0 20
Run Code Online (Sandbox Code Playgroud)

实际使用:

awk -F: '{ if($4=="1-10") print $1}' sample.txt
output = sample1, sample2, sample3, sample4
Run Code Online (Sandbox Code Playgroud)

应该是:sample1 sample2只有.

语法中是否有错误,我没有看到,或者我可能使用这种语法完全错误?

bash awk numbers range

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

如何从CSV文件中获取每一行的第一列?

如何获取输入CSV文件中每行的第一列并输出到新文件?我在想awk但是不确定如何使用.

csv bash shell awk text-parsing

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

仅打印字符串中的第一个字段

我有一个约会,因为12/12/2013 14:32我想将其转换为仅12/12/2013.字符串可以是1/1/2013 12:32或者1/10/2013 23:41我只需要日期部分.

unix awk field cut sed

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

将参数传递给awk脚本文件

如果我想将参数传递给awk脚本文件,我该怎么做?

#!/usr/bin/awk -f

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

这里我想打印从shell传递给脚本的第一个参数,如:

bash-prompt> echo "test" | ./myawkscript.awk hello
bash-prompt> hello
Run Code Online (Sandbox Code Playgroud)

unix linux awk

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

为什么awk中的"1"打印当前行?

这个答案中,

awk '$2=="no"{$3="N/A"}1' file
Run Code Online (Sandbox Code Playgroud)

被接受了.请注意1AWK脚本的末尾.在评论中,答案的作者说

[1]是显示当前行的神秘方式.

我很困惑.这是如何运作的?

awk

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

从cut命令强制输出字段的顺序

我想做这样的事情:

cat abcd.txt | cut -f 2,1 
Run Code Online (Sandbox Code Playgroud)

我希望输出中的顺序为2然后为1.在我正在测试的机器上(FreeBSD 6),这没有发生(它以1,2顺序打印).你能告诉我怎么做吗?

我知道我总是可以编写一个shell脚本来执行此操作,但我正在寻找使用'cut'命令选项的东西.

我想我正在使用包含cut的coreutils的5.2.1版本.

unix shell awk freebsd gnu-coreutils

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

正则表达式批量重命名OS X终端中的文件

我正在使用正则表达式批量重命名文件

s/123/onetwothree/g
Run Code Online (Sandbox Code Playgroud)

我记得我可以使用awk和sed与正则表达式,但无法弄清楚如何将它们一起管道以获得所需的输出.

regex macos shell awk sed

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

BASH中多列文件的反向排序顺序

我有以下文件:

1 2 3
1 4 5
1 6 7
2 3 5
5 2 1
Run Code Online (Sandbox Code Playgroud)

我希望文件按第二列排序,但从最大数量(在本例中为6)到最小数量.我试过了

sort +1 -2 file.dat
Run Code Online (Sandbox Code Playgroud)

但它给了我颠倒的顺序.

结果应该是:

1 6 7
1 4 5
2 3 5
5 2 1
1 2 3
Run Code Online (Sandbox Code Playgroud)

unix linux sorting bash awk

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

如何在unix中每行的末尾添加文本

我正在进行某些文本处理操作,最终能够获得这样的文件

india
sudan
japan
france
Run Code Online (Sandbox Code Playgroud)

现在我想在上面的文件中添加注释,就像在最终文件中它应该是类似的

india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
Run Code Online (Sandbox Code Playgroud)

像整个文件中的相同评论.我该怎么做呢?

unix shell awk ksh

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

标签 统计

awk ×10

unix ×6

bash ×4

shell ×4

linux ×3

sed ×2

csv ×1

cut ×1

field ×1

freebsd ×1

gnu-coreutils ×1

ksh ×1

macos ×1

numbers ×1

range ×1

regex ×1

sorting ×1

text-parsing ×1