如果长度语句附加,则为AWK

时间:2015-06-05 23:12:01

标签: 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@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语句之后,是否有人知道正确的格式化?

1 个答案:

答案 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