晚上好。
我在处理awk的上一个字段时遇到了一个奇怪的现象,我想和大家分享一下。
我有一个社交网络的日志文件,其中包含一些用|分隔的字段。这些字段并不重要,但它们会出现在下面的格式中。
id|name|lastname|...|Social_Media_Used(nothing)
有9个独立的字段。
每行都包含一个用户。例如^random_numbers|Aris|something|...|Facebook$
我们的目标是找到一种方法,找出每个社交媒体使用的总数。我已经使用上面的代码做到了这一点。
grep -v '^#' $3 | awk -F\| '{print $9}' | sort | uniq -c | awk '{print $1$2}'
第一个命令从我的文件中删除被视为注释的#。
第二个命令查找并打印字段9,它对应于字段Social_Media_Used.This是最后一个字段,所以我猜它的末尾应该是\n。
之后,我对字段进行排序和计数,最后awk像这样打印输出:
884Blogger
1105Facebook
1326Flickr
1104Google+
1105Instagram
1105LinkedIn
1325Twitter
1546Youtube
如果我在最后一条命令中尝试:
awk '{print $2$1}‘然后发生了一些奇怪的事情。
如果我将它存储在一个文件中,我可以像这样看到它:
Blogger
884
Facebook
1105
Flickr
1326
Google+
1104
Instagram
1105
LinkedIn
1105
Twitter
1325
Youtube
1546
但是,如果我尝试查看来自终端的输出表单,我会看到以下内容:
884gger
1105book
1326kr
1104le+
1105agram
1105edIn
1325ter
1546ube
所需的输出为:
Blogger 884
Facebook 1105
Flickr 1326
Google+ 1104
Instagram 1105
LinkedIn 1105
Twitter 1325
Youtube 1546
我搜索了关于sed或awk的RS,ORS或FRS的所有东西,我也尝试了printf或print,但我找不到任何匹配甚至接近同一line.No中的word-space-number的内容,无论我如何打印或打印这些lines.Howewer,当我试图打印一个从main复制粘贴的20行内容的虚拟文件时,一切都会smoothly.Also,如果我尝试打印或打印字段8或7,一切都会顺利进行。
这个问题的解决方案在哪里?在9500个文件的长文件中?还是在单词后面有换行符的事实?你觉得呢?
发布于 2018-12-20 03:16:48
您的数据很可能包括\r\n
行尾。首先运行dos2unix file
你也可以用这个去掉大部分管道。
$ awk -F\| '!/^#/{a[$9]++} END{for(k in a) print k,a[k]}' file | sort
发布于 2018-12-20 03:20:35
替换为GNU awk:
awk '{print $2$1}'
使用
awk -v RS='\r*\n' '{print $2$1}'
处理Unix和DOS/Windows的行尾。
https://stackoverflow.com/questions/53857609
复制相似问题