我有一个文本文件,我试图将第一列中的特定字符(.)替换为另一个字符( - ).每个字段都以逗号分隔.有些行的最后3列是空的,所以最后有3个逗号.
文本文件示例:
abc.def.ghi,123.4561.789,ABC,DEF,GHI
abc.def.ghq,124.4562.789,ABC,DEF,GHI
abc.def.ghw,125.4563.789,ABC,DEF,GHI
abc.def.ghe,126.4564.789,,,
abc.def.ghr,127.4565.789,,,
Run Code Online (Sandbox Code Playgroud)
我尝试过使用awk替换'.' 在第一列中使用' - ',然后打印出内容.
ETA:尝试了sarnold的建议,得到了我想要的输出.
ETA2:我可以有更长的第一列.有没有办法只改变前3'.' 在第一列' - ',所以我得到了输出
abc-def-ghi-qqq.www,123.4561.789,ABC,DEF,GHI
abc-def-ghq-qqq.www,124.4562.789,ABC,DEF,GHI
abc-def-ghw-qqq.www,125.4563.789,ABC,DEF,GHI
abc-def-ghe-qqq.www,126.4564.789,,,
abc-def-ghr-qqq.www,127.4565.789,,,
Run Code Online (Sandbox Code Playgroud)
.
是"任何角色"的正则表达式.逃避它,\
它意味着.
:
$ awk -F, '{gsub(/\./,"-",$1); print}' textfile.csv
abc-def-ghi 123.4561.789 ABC DEF GHI
abc-def-ghq 124.4562.789 ABC DEF GHI
abc-def-ghw 125.4563.789 ABC DEF GHI
abc-def-ghe 126.4564.789
abc-def-ghr 127.4565.789
$
Run Code Online (Sandbox Code Playgroud)
默认情况下,输出字段分隔符是一个空格.设置OFS = ","
为:
$ awk -F, 'BEGIN {OFS=","} {gsub(/\./,"-",$1); print}' textfile.csv
abc-def-ghi,123.4561.789,ABC,DEF,GHI
abc-def-ghq,124.4562.789,ABC,DEF,GHI
abc-def-ghw,125.4563.789,ABC,DEF,GHI
abc-def-ghe,126.4564.789,,,
abc-def-ghr,127.4565.789,,,
Run Code Online (Sandbox Code Playgroud)
这仍然允许更改多个字段:
$ awk -F, 'BEGIN {OFS=","} {gsub(/\./,"-",$1); gsub("1", "#",$2); print}' textfile.csv
abc-def-ghi,#23.456#.789,ABC,DEF,GHI
abc-def-ghq,#24.4562.789,ABC,DEF,GHI
abc-def-ghw,#25.4563.789,ABC,DEF,GHI
abc-def-ghe,#26.4564.789,,,
abc-def-ghr,#27.4565.789,,,
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么-OFS,
做,但它不是一个支持的命令行选项; 使用它来设置输出字段分隔符是我的错误.程序OFS
内的设置awk
效果很好.
归档时间: |
|
查看次数: |
14873 次 |
最近记录: |