If statement AWK if-length语句追加
我正在尝试修复csv文件中丢失数据的问题。该列(应为null)缺少用于维护csv结构的双字段分隔符。下面的例子说明了我的意思:If statement AWK if-length语句追加,if-statement,awk,append,If Statement,Awk,Append,我正在尝试修复csv文件中丢失数据的问题。该列(应为null)缺少用于维护csv结构的双字段分隔符。下面的例子说明了我的意思: 1@Sunshine@2/M@L@JRVel@215@WAW 2@Pass@2/J@L1@JAvar@218@JKDes 3@Solo@2/K@JRosa@218@WAW 4@Bomber@2/D@L1@JLOrt@218@GCCon 5@SmokingCandy@2/Y@L1@MFco@218@SMAs 6@BigBound@2/H@L1@JCast@21
1@Sunshine@2/M@L@JRVel@215@WAW
2@Pass@2/J@L1@JAvar@218@JKDes
3@Solo@2/K@JRosa@218@WAW
4@Bomber@2/D@L1@JLOrt@218@GCCon
5@SmokingCandy@2/Y@L1@MFco@218@SMAs
6@BigBound@2/H@L1@JCast@218@SMAs
7@ShootBunies@2/H@L@DLPar@218@DKo
如您所见,在第三行第四列中,没有“L”或“L1”,而是“JRosa”。这会导致mysql数据库的格式错误。我想做的是使用AWK if语句在“JRosa”前面附加另一个分隔符。到目前为止,我有半个密码,不知道去哪里。我在想它会是这样开始的:
awk -F@ '{if(length($4) > 4) print "@"$4}'
这只是打印输出:
@JRosa
我希望找到一个解决方案,从而:
1@Sunshine@2/M@L@JRVel@215@WAW
2@Pass@2/J@L1@JAvar@218@JKDes
3@Solo@2/K@@JRosa@218@WAW
4@Bomber@2/D@L1@JLOrt@218@GCCon
5@SmokingCandy@2/Y@L1@MFco@218@SMAs
6@BigBound@2/H@L1@JCast@218@SMAs
7@ShootBunies@2/H@L@DLPar@218@DKo
有人知道可以用来附加输入数据的if语句之后的正确格式吗 如果行中的字段少于7个,只需在第3个字段的末尾添加一个额外的“@”:
$ awk 'BEGIN{FS=OFS="@"} NF<7{$3=$3FS} 1' file
1@Sunshine@2/M@L@JRVel@215@WAW
2@Pass@2/J@L1@JAvar@218@JKDes
3@Solo@2/K@@JRosa@218@WAW
4@Bomber@2/D@L1@JLOrt@218@GCCon
5@SmokingCandy@2/Y@L1@MFco@218@SMAs
6@BigBound@2/H@L1@JCast@218@SMAs
7@ShootBunies@2/H@L@DLPar@218@DKo
$awk'BEGIN{FS=OFS=“@”}谢谢你!这就是我需要的解决方案。