小编Luk*_*sCB的帖子

如何在awk中打​​印没有字段分隔符的行?

我有这样的数据(文件被称为list-in.dat)

a ; b ; c ; i
d
e ; f ; a ; b
g ; h ; i
Run Code Online (Sandbox Code Playgroud)

并且我想要一个这样的列表(输出文件list-out.dat),其中包含所有项目,按字母顺序(不区分大小写)和每个唯一项目仅一次。

a
b
c
d
e
f
g
h
i
Run Code Online (Sandbox Code Playgroud)

我的尝试是:

awk -F " ; " ' BEGIN { OFS="\n" ; } {for(i=0; i<=NF; i++) print $i} ' file-in.dat | uniq | sort -uf > file-out.dat
Run Code Online (Sandbox Code Playgroud)

但我最终得到了所有的蚂蚁,除了那些只有一个项目的行:

a
b
c
e
f
g
h
i
Run Code Online (Sandbox Code Playgroud)

无论一行中有多少项目/如果缺少字段分隔符,我如何获得所有(唯一的、已排序的)项目?

regex sorting awk list

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

如何在bash中使用awk循环一个字段的多个值?

我的数据集如下所示:

lastname|name|hash
A|B|C
D|E|
G|H|I J
Run Code Online (Sandbox Code Playgroud)

我需要awkbash中这种格式的数据(最好带有)。

{C}% B A
{I}% H G
{J}% H G
Run Code Online (Sandbox Code Playgroud)

换句话说:仅当hash我想输出的第三列 ( )有值时。第三列 ( hash) 中可以有 1-n 个值,对于每个值,输出应如下所示:

{hash}% name lastname

bash awk

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

使用 awk 比较两个文件并映射聚合的多个值

我有两个文件需要比较和映射多行匹配的值。

我的映射文件 ( map.csv) 看起来像:

id,name
123,Hans
123,Britta
232,Peter
343,Siggi
343,Horst
Run Code Online (Sandbox Code Playgroud)

数据文件 ( data.csv) 是

contact,id,names
m@a.de,123,
ad@23.com,343,
adf@er.org,123,
af@go.er,232,
llk@fh.com,343,
ad@wer.org,789,
Run Code Online (Sandbox Code Playgroud)

不想要的输出应该是这样的

contact,id,names
m@a.de,123,Hans Britta 
ad@23.com,343,Siggi Horst 
adf@er.org,123,Hans Britta 
af@go.er,232,Peter 
llk@fh.com,343,Siggi Horst
ad@wer.org,789,NO ENTRY
Run Code Online (Sandbox Code Playgroud)

映射文件中的一个 ID 有多个值,它们应该以空格分隔打印到names数据文件的列中。如果映射文件中没有 ID,则应打印“NO ENTRY”。

这是 awk 命令

awk 'NR==FNR{a[$1];next}{print $0,($2 in a)? a[$2]:"NO ENTRY"}' map.csv data.csv
Run Code Online (Sandbox Code Playgroud)

我显然失败了,因为我不知道如何遍历映射文件以将多个值获取到一个 id(或当前任何值)。

csv awk loops

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

标签 统计

awk ×3

bash ×1

csv ×1

list ×1

loops ×1

regex ×1

sorting ×1