将每列的第一个字母放在eol中

时间:2018-03-19 19:17:00

标签: shell awk sed

我有一个这样的文件:

A_City,QQQQ,AQ
B_State,QQQQ,BQ
C_Country,QQQQ,CQ
A_Cityt,YYYY,AY
B_State,YYYY,BY
C_Country,YYYY,CY

我想在同一个文件的行尾添加一列,每列的第一个字母。

docker-compose.yaml

我想使用sed来获取它,但如果有awk代码会有帮助。

3 个答案:

答案 0 :(得分:1)

awk救援!

$ awk '{print $0 "," substr($0,1,1) substr($0,length($0))}' file

A_City,QQQQ,AQ
B_State,QQQQ,BQ
C_Country,QQQQ,CQ
A_Cityt,YYYY,AY
B_State,YYYY,BY
C_Country,YYYY,CY

或者,或许

$ awk -F, '{print $0 FS substr($1,1,1) substr($2,1,1)}' file

答案 1 :(得分:0)

如果只有一个,,则可以使用

sed -r 's/^(.).*,(.).*/&,\1\2/' file

答案 2 :(得分:0)

这可能适合你(GNU sed):

 sed -r 's/^|,+/&\n/g;s/$/,\n/;:a;s/\n(.).*,\n.*/&\1/;s/\n//;/\n.*,\n/ba;s/\n//g' file

在一行的开头或一个或多个,后面插入换行符。在行尾添加一个额外的,和换行符。在换行符之后附加一个字符,后跟零个或多个字符,后跟一个,和一个最终换行符以及与其匹配的任何后续字符。删除第一个换行符。如果有两个或更多新行重复。最后删除所有换行符。

N.B。如果该行最初为空,则会向此类行添加,。空字段可以满足,并且不会出现第一个字符。