1

我有一个文件:

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: 
userpc@userpc-desktop:~

2.

$ awk 'BEGIN{ while( getline a < "file") sub($NF,"", a); print a}' 
Srednia ocen Jan Resiak: 3.90 
userpc@userpc-desktop:~/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:  
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 方式:

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:

如果你想引入你自己的变量,比如说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:
于 2012-09-27T13:40:17.490 回答
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 回答