使用awk选择具有不均匀字符串数据的列

时间:2017-09-26 12:34:52

标签: unix awk

我有一个像这样的数据表

Student|Marks|remarks
------ | --- | ------
a      |50   |Need to improve
------ | --- | ------
b      |70   |Good performance 
------ | --- | ------

当我使用awk '((NR % 2) == 0) {printf "%-10s %-10s %10s\n", $1, $2, $3}' Filename.txt时,它只考虑上一栏中的需要,需要提出建议,因为最后的评论也有不均匀的空格。< / p>

提前致谢

2 个答案:

答案 0 :(得分:2)

  

什么时候使用awk'((NR%2)== 0){printf“%-10s%-10s%10s \ n”,$ 1,   $ 2,$ 3}'Filename.txt,它只是考虑了上次的需求   专栏,需要就此提出建议,因为最后的评论也有不均衡   空格。

  • 您需要Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type chartingToolkit:ColumnSeries}},Path=DataContext.ColumnValues.Legend1, Mode=TwoWay} -F'|',然后才能处理不均匀的空间,

  • 默认情况下-v FS='|'使用单个空格作为字段分隔符,因此仅打印最后一列的需要

    < / LI>

awk

((NR % 2) == 0)

所以只会打印奇数行(据我所知不均匀)

(NR % 2) 
  

$ cat infile Student|Marks|remarks ------ | --- | ------ a |50 |Need to improve ------ | --- | ------ b |70 |Good performance ------ | --- | ------ $ awk -F'|' '(NR % 2){printf "%-10s %-10s %10s\n", $1, $2, $3}' infile Student Marks remarks a 50 Need to improve b 70 Good performance 默认行为,即单个空格作为字段分隔符

awk
  

$ awk 'NR==3{for(i=1;i<=NF;i++)printf("Column-%d = $%d = %s\n",i,i,$i)}' infile Column-1 = $1 = a Column-2 = $2 = |50 Column-3 = $3 = |Need Column-4 = $4 = to Column-5 = $5 = improve 设置awk,管道作为字段分隔符

时的行为方式
-F'|'

答案 1 :(得分:0)

如果您只想删除“边框”,则无需关心FSNR内容,请尝试使用此sed单行代码:

sed -n 's/|/ /g; /[^- |]/p' file

使用您的测试数据输出:

Student Marks remarks
a       50    Need to improve
b       70    Good performance

更新

  

现在没有删除边框,但现在我需要选择第3列,但它只选择Need and good - Saurabhdv27

$  awk -F'|' 'NR>1&&$3~/[^ -]/{print $3}' file
Need to improve
Good performance