我正在尝试解决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语句之后,是否有人知道正确的格式化?
答案 0 :(得分:2)
如果行上少于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