使用awk打印选定的行

时间:2017-08-23 11:35:50

标签: awk awk-formatting

我有一个文本文件,我想只打印它的选定行。下面是文本文件的虚拟格式:

Name Sub Marks percentage
A     AB  50     50
Name Sub Marks percentage
b     AB  50     50
Name Sub Marks percentage
c     AB  50     50
Name Sub Marks percentage
d    AB  50     50

我需要输出为:(不要在每条记录之前前进,只需要3列省略" MARKS")

Name Sub  percentage
A     AB     50
b     AB     50
c     AB     50
d     AB      50

请建议我使用awk命令的形式,我可以实现这一点,并感谢您的支持。

3 个答案:

答案 0 :(得分:1)

awk 解决方案:

awk 'NR==1 || !(NR%2){ print $1,$2,$4 }' OFS='\t' file
  • NR==1 || !(NR%2) - 仅考虑第1行和每个偶数

  • OFS='\t' - 输出字段分隔符

输出:

Name    Sub percentage
A   AB  50
b   AB  50
c   AB  50
d   AB  50

答案 1 :(得分:1)

您可以使用:

awk '(NR == 1) || ((NR % 2) == 0) {print $1" "$2" "$4}' inputFile

这将打印第一列,第二列和第四列,但仅限于记录号为1或偶数。结果是:

Name Sub percentage
A AB 50
b AB 50
c AB 50
d AB 50

如果您希望格式良好,则可以使用printf代替:

awk '(NR == 1) || ((NR % 2) == 0) {printf "%-10s %-10s %10s\n", $1, $2, $4}' inputFile

Name       Sub        percentage
A          AB                 50
b          AB                 50
c          AB                 50
d          AB                 50

答案 2 :(得分:0)

如果输入文件的格式略有不同,则解决方案将失败。例如:

Name Sub Marks percentage
A     AB  50     50
Name Sub Marks percentage
b     AB  50     50
c     AB  50     50
Name Sub Marks percentage
d    AB  50     50

在这种情况下,类似的东西在所有情况下都会起作用:

$ awk '$0!=h;NR==1{h=$0}' file1
Name Sub Marks percentage
A     AB  50     50
b     AB  50     50
c     AB  50     50
d    AB  50     50