If statement AWK if-length语句追加

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

我正在尝试修复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@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=“@”}谢谢你!这就是我需要的解决方案。