簡體   English   中英

使用awk打印選定的行

[英]use awk for printing selected rows

我有一個文本文件,我只想打印它的選定行。 下面是文本文件的偽格式:

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命令的形式,我可以使用該形式來實現此目標,並感謝您的支持。

awk解決方案:

awk 'NR==1 || !(NR%2){ print $1,$2,$4 }' OFS='\t' file
  • NR==1 || !(NR%2) NR==1 || !(NR%2) -僅考慮第一行和每個偶數

  • 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

這將打印第一,第二和第四列,但前提是記錄號為一或偶數。 結果是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM