首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Awk的print会疯狂地形成两个简单的管道字段?

为什么Awk的print会疯狂地形成两个简单的管道字段?
EN

Stack Overflow用户
提问于 2018-12-20 02:59:01
回答 2查看 52关注 0票数 0

晚上好。

我在处理awk的上一个字段时遇到了一个奇怪的现象,我想和大家分享一下。

我有一个社交网络的日志文件,其中包含一些用|分隔的字段。这些字段并不重要,但它们会出现在下面的格式中。

id|name|lastname|...|Social_Media_Used(nothing)

有9个独立的字段。

每行都包含一个用户。例如^random_numbers|Aris|something|...|Facebook$

我们的目标是找到一种方法,找出每个社交媒体使用的总数。我已经使用上面的代码做到了这一点。

代码语言:javascript
复制
grep -v '^#' $3 | awk -F\| '{print $9}' | sort | uniq -c | awk '{print $1$2}'  

第一个命令从我的文件中删除被视为注释的#。

第二个命令查找并打印字段9,它对应于字段Social_Media_Used.This是最后一个字段,所以我猜它的末尾应该是\n。

之后,我对字段进行排序和计数,最后awk像这样打印输出:

代码语言:javascript
复制
884Blogger  
1105Facebook  
1326Flickr  
1104Google+  
1105Instagram  
1105LinkedIn  
1325Twitter  
1546Youtube  

如果我在最后一条命令中尝试:

awk '{print $2$1}‘然后发生了一些奇怪的事情。

如果我将它存储在一个文件中,我可以像这样看到它:

代码语言:javascript
复制
Blogger  
 884  
Facebook  
 1105  
Flickr  
 1326  
Google+  
 1104  
Instagram  
 1105
LinkedIn  
 1105  
Twitter  
 1325  
Youtube  
 1546  

但是,如果我尝试查看来自终端的输出表单,我会看到以下内容:

代码语言:javascript
复制
884gger  
1105book  
1326kr  
1104le+  
1105agram  
1105edIn  
1325ter  
1546ube  

所需的输出为:

代码语言:javascript
复制
 Blogger 884
代码语言:javascript
复制
 Facebook 1105
代码语言:javascript
复制
 Flickr 1326
代码语言:javascript
复制
 Google+ 1104
代码语言:javascript
复制
 Instagram 1105
代码语言:javascript
复制
 LinkedIn 1105
代码语言:javascript
复制
 Twitter 1325
代码语言:javascript
复制
 Youtube 1546  

我搜索了关于sed或awk的RS,ORS或FRS的所有东西,我也尝试了printf或print,但我找不到任何匹配甚至接近同一line.No中的word-space-number的内容,无论我如何打印或打印这些lines.Howewer,当我试图打印一个从main复制粘贴的20行内容的虚拟文件时,一切都会smoothly.Also,如果我尝试打印或打印字段8或7,一切都会顺利进行。

这个问题的解决方案在哪里?在9500个文件的长文件中?还是在单词后面有换行符的事实?你觉得呢?

EN

回答 2

Stack Overflow用户

发布于 2018-12-20 03:16:48

您的数据很可能包括\r\n行尾。首先运行dos2unix file

你也可以用这个去掉大部分管道。

代码语言:javascript
复制
$ awk -F\| '!/^#/{a[$9]++} END{for(k in a) print k,a[k]}' file | sort 
票数 1
EN

Stack Overflow用户

发布于 2018-12-20 03:20:35

替换为GNU awk:

代码语言:javascript
复制
awk '{print $2$1}'

使用

代码语言:javascript
复制
awk -v RS='\r*\n' '{print $2$1}'

处理Unix和DOS/Windows的行尾。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53857609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档