2017-08-23 47 views
0

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

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列省略“标志”)

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

请建议我使用一种awk命令来实现这一点,并感谢您的支持。

+0

只是一个小的增强需要,如果最后一列说备注在上面的表格中相加,其数据是字符串格式,如“学生是通过/失败”,那么我们如何使用awk对其进行格式化。 关于如何修改的建议如下: awk'(NR == 1)|| ((NR%2)== 0){print $ 1“”$ 2“”$ 4}'inputFile – Saurabhdv27

回答

1

AWK溶液:

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

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

输出:

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

Upvote快一分钟:-) –

+1

@GeorgeVasiliou,谢谢 – RomanPerekhrest

1

您可以使用:

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

这将打印一,二,四列,但只有当记录数量是一个或偶数。结果是:

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 
+0

非常感谢,我已经完成了上述解决方案 – Saurabhdv27

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