2012-09-27 66 views
1

我有一個文件:AWK,函數getline - 刪除最後一個字段

Srednia ocen Wojciech Zieba: 3.83 
Srednia ocen Jakub Pelc: 3.76 
Srednia ocen Jan Resiak: 3.90 

我想提高命令:

1.

$ awk 'BEGIN{ while(getline $0 < "file") sub($NF,"",$0); print $0}' 
Srednia ocen Jan Resiak: 
[email protected]:~ 

2.

$ awk 'BEGIN{ while(getline a < "file") sub($NF,"", a); print a}' 
Srednia ocen Jan Resiak: 3.90 
[email protected]:~/Pulpit$ 

我必須通過getline來完成。我的例子只是腳本的一部分。我想刪除最後一個字段並打印結果:

Srednia ocen Wojciech Zieba: 
Srednia ocen Jakub Pelc: 
Srednia ocen Jan Resiak: 

感謝您的幫助。

編輯:

但這種方式不打印剩餘字段:

$ awk 'BEGIN{ while(getline a < "file") {sub(/[^:]*$/,"",a); print a, $1, $3}}' 
Srednia ocen Wojciech Zieba: 
Srednia ocen Jakub Pelc: 
Srednia ocen Jan Resiak: 
[email protected]:~/Pulpit$ 

此命令打印的所有字段:

$ awk 'BEGIN{ while(getline $0 < "file") {sub($NF,"",$0); print $0, $1, $3}}' 
Srednia ocen Wojciech Zieba: Srednia Wojciech 
Srednia ocen Jakub Pelc: Srednia Jakub 
Srednia ocen Jan Resiak: Srednia Jan 
[email protected]:~/Pulpit$ 

如何提高第一命令?我想先指揮這個領域的共享線。

編輯-1:

我想提高命令:

awk 'BEGIN{ while(getline a < "file") {sub(/[^:]*$/,"",a); print a, $1, $3}}' 

我想打印結果:

Srednia ocen Wojciech Zieba: Srednia Wojciech 
Srednia ocen Jakub Pelc: Srednia Jakub 
Srednia ocen Jan Resiak: Srednia Jan 
+0

請加上預期的輸出。 – Thor

+0

Thor - >請參閱我的編輯-1。 – Tedee12345

回答

0

一個awk方式:

awk -F':' '$0=$1 ":"' file 

測試

kent$ echo "Srednia ocen Wojciech Zieba: 3.83 
Srednia ocen Jakub Pelc: 3.76 
Srednia ocen Jan Resiak: 3.90"|awk -F':' '$0=$1 ":"' 
Srednia ocen Wojciech Zieba: 
Srednia ocen Jakub Pelc: 
Srednia ocen Jan Resiak: 

更新

我不知道你真正想要做什麼,而是你的同時{}範圍有問題。也許你想要這個?

kent$ awk 'BEGIN{ while(getline $0 < "file") {sub($NF,"",$0); print $0}}' 
Srednia ocen Wojciech Zieba: 
Srednia ocen Jakub Pelc: 
Srednia ocen Jan Resiak: 

如果你想引入你自己的變量,比如說a,它不知道$ NF。根據你的榜樣,你可以這樣做:

kent$ awk 'BEGIN{ while(getline a < "file") {sub(/[^:]*$/,"",a); print a}}' 
Srednia ocen Wojciech Zieba: 
Srednia ocen Jakub Pelc: 
Srednia ocen Jan Resiak: 
+0

一個好的解決方案,但我必須通過getline來完成。我的例子只是腳本的一部分。 – Tedee12345

+0

@ Tedee12345看到更新,希望它有幫助 – Kent

+0

一個很好的解決方案,但如何改進這個例子?:'awk'BEGIN {while(getline a <「file」)sub($ NF,「」,a);打印}' – Tedee12345

1

無需awk中,使用切割和sed:

$ cat in.txt 
Srednia ocen Wojciech Zieba: 3.83 
Srednia ocen Jakub Pelc: 3.76 
Srednia ocen Jan Resiak: 3.90 
$ cut -d: -f1 in.txt | sed 's/$/:/' 
Srednia ocen Wojciech Zieba: 
Srednia ocen Jakub Pelc: 
Srednia ocen Jan Resiak: 
+0

一個好的解決方案,但我必須通過getline來完成。我的例子只是腳本的一部分。 – Tedee12345

1

因爲它是你設置a變量反過來每一行,但如果省略a$0將設置和自動拆分將被執行,這將允許你這樣做:

awk 'BEGIN{ while(getline < "file") { $NF = ""; print $0, $1, $3 } }' 

輸出:

Srednia ocen Wojciech Zieba: Srednia Wojciech 
Srednia ocen Jakub Pelc: Srednia Jakub 
Srednia ocen Jan Resiak: Srednia Jan 
+0

感謝您對第二條命令的解釋。 – Tedee12345