为什么Awk的印刷品在格式化两个简单的管道字段时会表现得疯狂?

时间:2018-12-19 18:59:01

标签: bash awk sed

晚上好。

在处理awk的最后一个要与您分享的领域时,我遇到了一个奇怪的现象。
我有一个用于社交网络的日志文件,其中包含一些由|分隔的字段。 这些字段不是重要的恕我直言,但它们会以这种格式显示。
id |名称|姓氏| ... | Social_Media_Used(无)
有9个单独的字段。

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

目标是找到一种方法来为使用的每个社交媒体查找总计。我已经使用上面的代码完成了此操作。

grep -v '^#' $3 | awk -F\| '{print $9}' | sort | uniq -c | awk '{print $1$2}'  

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

第二个命令查找并打印与字段对应的字段9 Social_Media_Used 。这是最后一个字段,因此我想它的末尾会有\ 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
    脸书1105
    Flickr 1326
    Google+ 1104
    Instagram的1105
    领英1105
    Twitter 1325
    YouTube 1546

我搜索了有关sed或awk的RS,ORS或FRS的所有内容,并且还尝试使用printf或print,但是我找不到与之匹配或什至几乎在同一行中都没有word-space-number的内容。我如何打印或打印这些行。但是,当我尝试打印一个伪文件时,我从主行复制粘贴了20行,一切都进行得很顺利。此外,如果我尝试打印或打印8或7字段,一切都将顺利进行。 / p>

该问题的解决方案在哪里?在9500个文件的长文件中?还是在单词后存在换行符?您如何看待?

2 个答案:

答案 0 :(得分:1)

您的数据最有可能包含\r\n行尾。首次运行dos2unix file

您也可以消除大多数管道

$ awk -F\| '!/^#/{a[$9]++} END{for(k in a) print k,a[k]}' file | sort 

答案 1 :(得分:1)

用GNU awk代替:

$('.content[data-id="Java"]') 

使用

$('.content[data-id="Java"] > button').hide()

处理Unix和DOS / Windows行尾。