使用awk打印选定行

使用awk打印选定行,awk,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 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列,省略“标记”)

请向我推荐一种形式的awk命令,我可以使用它来实现这一点,并感谢您的支持。

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
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
您可以使用:

awk '(NR == 1) || ((NR % 2) == 0) {print $1" "$2" "$4}' inputFile
这将打印第1列、第2列和第4列,但仅当记录编号为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
您可以使用:

awk '(NR == 1) || ((NR % 2) == 0) {print $1" "$2" "$4}' inputFile
这将打印第1列、第2列和第4列,但仅当记录编号为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

若输入文件的格式稍有不同,上述解决方案将失败。例如:

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

若输入文件的格式稍有不同,上述解决方案将失败。例如:

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

非常感谢,我已经用上面的解决方案完成了。非常感谢,我已经用上面的解决方案完成了。只是需要一个小小的增强,如果上表中添加了最后一列say备注,并且它的数据是字符串格式,如“学生通过/失败”,那么我们如何使用awk格式化它。关于如何修改以下内容的任何建议:awk'(NR==1)| |((NR%2)==0){print$1”“$2”“$4}”inputfile只需稍加增强,如果上表中添加了最后一列say comments,并且其数据是类似“Student is pass/fail”的字符串格式,那么我们如何使用awk对其进行格式化。关于如何修改以下内容的任何建议:awk'(NR==1)| |((NR%2)==0){print$1”“$2”“$4}inputFile