1

私はファイルを持っています:

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

コマンドを改善したい:

1.1。

$ awk 'BEGIN{ while( getline $0 < "file") sub($NF,"",$0); print $0}' 
Srednia ocen Jan Resiak: 
userpc@userpc-desktop:~

2.2。

$ awk 'BEGIN{ while( getline a < "file") sub($NF,"", a); print a}' 
Srednia ocen Jan Resiak: 3.90 
userpc@userpc-desktop:~/Pulpit$

私はgetl​​ineでそれをしなければなりません。私の例はスクリプトの一部にすぎません。最後のフィールドを削除して結果を出力したい:

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:  
bolek@bolek-desktop:~/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
bolek@bolek-desktop:~/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
4

3 に答える 3

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
于 2012-09-27T19:43:32.467 に答える
1

awkは必要ありません。cutと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:
于 2012-09-27T13:28:06.267 に答える
1

厄介な方法:

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:

アップデート

あなたが本当に何をしたいのかわかりませんが、while{}スコープに問題があります。多分あなたはこれが欲しいですか?

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

独自の変数を導入したい場合、たとえば、$NFについてはわかりません。あなたの例に基づいて、あなたは次のことができます:

kent$  awk 'BEGIN{ while( getline a < "file") {sub(/[^:]*$/,"",a); print a}}' 
Srednia ocen Wojciech Zieba:
Srednia ocen Jakub Pelc:
Srednia ocen Jan Resiak:
于 2012-09-27T13:40:17.490 に答える