2017-08-23 87 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