我有一个文件:
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
答案 0 :(得分: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:
答案 1 :(得分: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:
<强>更新强>
我不知道你真正想做什么,但你的{}范围有问题。也许你想要这个?
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:
答案 2 :(得分: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