我有一个以管道分隔的文件,我想在字段/列24之后添加一个新单词(以文件名表示为示例),我尝试使用
awk -F "|" '{{$(NF-2)="filename.txt"} print $0 }' OFS="|"但这会覆盖相邻的列。
如:
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将是:
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:
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有些人能帮我在特定位置添加一个词而不覆盖。
发布于 2017-10-04 10:52:34
支持sed ( -E或-r取决于您的sed版本):
sed -E 's/(([^|]*\|){24})/\1filename.txt|/'发布于 2017-10-04 10:49:10
关于这个问题,我们的想法就像认为文件是一个csv,但是使用|作为分隔符:
awk -F"|" 'BEGIN { OFS = "|" } {$24="filename"}1' file但这产生了以下结果:
...13.10.2016|filename|X||NP在您想要的输出示例中,没有使用额外的|:
...13.10.2016||filename|X||NP会不会是个打字错误?
在任何情况下,@的回答都是简短而清晰的:
awk 'BEGIN{FS=OFS="|"}{$24=FILENAME}1' file发布于 2017-10-04 10:54:39
我有一个以管道分隔的文件,我想在字符位置24之后添加一个新单词(以文件名表示为示例),
在24字符位置,它不会给出预期的输出,您可能需要如下所示,这将在filename.txt中记录第24列,
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个字段,其中分隔符为管道。
awk 'BEGIN{FS=OFS="|"}{$24="filename.txt"}1' file如果希望在第24个字段具有当前文件名,请使用FILENAME
awk 'BEGIN{FS=OFS="|"}{$24=FILENAME}1' fileNF-2给出了25,您仍然可以用NF-3修改您的代码,以便修改第24字段。要在字符位置24处插入字符串,我更喜欢
sed
sed -r -e 's/^.{24}/&filename.txt/' filenamehttps://stackoverflow.com/questions/46562769
复制相似问题