我有这样的 file.txt
4142 2019-01-08T.002:00 JrNewman 080592Kl Developer
2125 2016-11-455.+02:00 Jackson John 180784SRE1 Maintainer
2293 2016-12-4100+02:00 Jackson John AZbissness Developer
1938 2015T12:1600+02:00 Jackson John AZ19043A4A Developer
2126 2016-123:46.003:00 Jackson John OZ40784SA3 Maintainer
2033 201615:33:28.00:00 Allen Robert JR pDbissness Developer
4846 202212:48:34+02:00 Walker Tom JR autotestbit Maintainer
5362 2022-12:440+302:00 Walker Tom Jr autotestbit Maintainer
2131 2012T21:.000+03:00 Allen Robert Jr Z1EW843V1 Maintainer
2128 2013T206.000+02:00 Administrator LL23042DE Guest
需要这样的东西
4142 2019-01-08T.002:00 080592Kl Developer JrNewman
2125 2016-11-455.+02:00 180784SRE1 Maintainer Jackson John
2293 2016-12-4100+02:00 AZbissness Developer Jackson John
1938 2015T12:1600+02:00 AZ19043A4A Developer Jackson John
2126 2016-123:46.003:00 OZ40784SA3 Maintainer Jackson John
2033 201615:33:28.00:00 pDbissness Developer Allen Robert JR
4846 202212:48:34+02:00 JR autotestbit Maintainer Walker Tom
5362 2022-12:440+302:00 autotestbit Maintainer Walker Tom Jr
2131 2012T21:.000+03:00 Z1EW843V1 Maintainer Allen Robert Jr
2128 2013T206.000+02:00 LL23042DE Guest Administrator
我知道我可以使用 awk print $column
并写入文件。
但我做不到((
最佳答案
使用您展示的示例,请尝试遵循 awk
代码。用 GNU awk
编写和测试,应该可以在任何 awk
中使用。简单的解释是使用 match
函数首先在 val1
变量中获取前 2 个字段,并在 len
变量中获取其长度。然后使用另一个 match
匹配最后 2 个字段,然后打印前 2 个字段、最后 2 个字段以及所有其余名称值之间(可以是单个值或 2 个值等等)。
awk '
match($0,/^[^[:space:]]+[[:space:]]+[^[:space:]]+[[:space:]]+/){
val1=substr($0,RSTART,RLENGTH)
len=RSTART+RLENGTH
}
match($0,/[^[:space:]]+[[:space:]]+[^[:space:]]+$/){
print val1 substr($0,RSTART,RLENGTH),substr($0,len,RSTART-len)
}
' Input_file
https://stackoverflow.com/questions/72782093/