如何用sed或awk为文件每行末尾添加列首字母组成的新列
这两个工具都能轻松搞定你的需求,给你分别说下实现方式:
用Awk实现(最直观简洁)
Awk处理列格式的数据本来就得心应手,这个需求用它写起来特别清爽:
awk -F',' '{print $0 "," substr($1,1,1) substr($2,1,1)}' your_input_file
简单解释下每个部分:
-F',':告诉Awk用逗号作为列分隔符,这样就能把每行拆成两列$0:代表当前正在处理的整行内容substr($1,1,1):从第一列的第1个位置开始,截取1个字符(也就是第一列的首字母)substr($2,1,1):同理,截取第二列的首字母- 最后把原内容、逗号、两个首字母拼接起来输出,正好就是你要的结果。
用Sed实现(纯文本替换思路)
如果习惯用Sed做文本替换,也可以通过正则捕获首字母来实现:
sed -E 's/^([A-Za-z])([^,]*),([A-Za-z])(.*)/\1\2,\3\4,\1\3/' your_input_file
这里的逻辑是用正则拆分行内容,再重新拼接:
-E:启用扩展正则表达式,避免写一堆烦人的转义符- 正则
^([A-Za-z])([^,]*),([A-Za-z])(.*):([A-Za-z]):捕获第一列的首字母(记为\1)([^,]*):捕获第一列首字母之后的所有字符(记为\2)([A-Za-z]):捕获第二列的首字母(记为\3)(.*):捕获第二列首字母之后的所有字符(记为\4)
- 替换后的
\1\2,\3\4,\1\3:先把原行内容还原出来,再追加逗号和两个首字母的组合。
内容的提问来源于stack exchange,提问作者ebk
相关产品推荐
相关产品推荐

