首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在shell中特定位置插入字符

在shell中特定位置插入字符
EN

Stack Overflow用户
提问于 2017-10-04 10:36:26
回答 4查看 1.9K关注 0票数 0

我有一个以管道分隔的文件,我想在字段/列24之后添加一个新单词(以文件名表示为示例),我尝试使用

代码语言:javascript
复制
awk -F "|" '{{$(NF-2)="filename.txt"} print $0 }' OFS="|"

但这会覆盖相邻的列。

如:

代码语言:javascript
复制
0|ZZZZZ|Mr XXXXX|73 Up hill|Hurley|Atherstone|||XXX XXX|GB|00.01.2017|2134567686|7902379xxx|01.09.2017|25|||239|Stores Sheffield|||07.01.2018|13.10.2016||X||NP

将是:

代码语言:javascript
复制
0|ZZZZZ|Mr XXXXX|73 Up hill|Hurley|Atherstone|||XXX XXX|GB|00.01.2017|2134567686|7902379xxx|01.09.2017|25|||239|Stores Sheffield|||07.01.2018|13.10.2016||filename|X||NP

用awk:

代码语言:javascript
复制
0|ZZZZZ|Mr XXXXX|73 Up hill|Hurley|Atherstone|||XXX XXX|GB|00.01.2017|2134567686|7902379xxx|01.09.2017|25|||239|Stores Sheffield|||07.01.2018|13.10.2016||filename|||NP

有些人能帮我在特定位置添加一个词而不覆盖。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-10-04 10:52:34

支持sed ( -E-r取决于您的sed版本):

代码语言:javascript
复制
sed -E 's/(([^|]*\|){24})/\1filename.txt|/'
票数 1
EN

Stack Overflow用户

发布于 2017-10-04 10:49:10

关于这个问题,我们的想法就像认为文件是一个csv,但是使用|作为分隔符:

代码语言:javascript
复制
awk -F"|" 'BEGIN { OFS = "|" } {$24="filename"}1' file

但这产生了以下结果:

代码语言:javascript
复制
...13.10.2016|filename|X||NP

在您想要的输出示例中,没有使用额外的|

代码语言:javascript
复制
...13.10.2016||filename|X||NP

会不会是个打字错误?

在任何情况下,@的回答都是简短而清晰的:

代码语言:javascript
复制
awk  'BEGIN{FS=OFS="|"}{$24=FILENAME}1' file
票数 0
EN

Stack Overflow用户

发布于 2017-10-04 10:54:39

我有一个以管道分隔的文件,我想在字符位置24之后添加一个新单词(以文件名表示为示例),

在24字符位置,它不会给出预期的输出,您可能需要如下所示,这将在filename.txt中记录第24列,

代码语言:javascript
复制
0|ZZZZZ|Mr XXXXX|73 Up hill|Hurley|Atherstone|||XXX XXX|GB|00.01.2017|2134567686|7902379xxx|01.09.2017|25|||239|Stores Sheffield|||07.01.2018|13.10.2016||X||NP
                       ^
                       |
                  This is 24th char position

由于您没有在没有代码标记的情况下发布,我猜想,它的一行包含总共27个字段,其中分隔符为管道。

代码语言:javascript
复制
awk  'BEGIN{FS=OFS="|"}{$24="filename.txt"}1' file

如果希望在第24个字段具有当前文件名,请使用FILENAME

代码语言:javascript
复制
awk  'BEGIN{FS=OFS="|"}{$24=FILENAME}1' file
  • 您已经尝试过了,NF-2给出了25,您仍然可以用NF-3修改您的代码,以便修改第24字段。

要在字符位置24处插入字符串,我更喜欢sed

代码语言:javascript
复制
sed -r -e 's/^.{24}/&filename.txt/' filename
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46562769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档