Unix Shell Scripting - 如何使用位置分隔符逐行读取文件中的值

时间:2015-03-09 21:05:43

标签: shell unix

我是一名java开发人员,没有shell脚本编写经验 我在Shell脚本中有这个代码,基本上读取文件

if [ -f $DATA_FILE ] ; then

    # Next - convert the data into insert statements
    nawk -F\^ '
    {
        #I believe $115 is the 115th record in the data file in each lines
        if ( $115 == "NULL" )
        {
            $115 = "";
        }

        output = "INSERT INTO DLRINFO";
        output = output " (C_DCS_DLR_NBR,";
        output = output " C_DLR_NBR,";
        output = output " C_LOC_COMP,";
        output = output " T_STAMP_CREATD,";
        output = output " I_CREATOR)";
        output = output " VALUES";
        output = output " (ZZZ" $1 "ZZZ,";
        output = output " ZZZ" $115 "ZZZ,";
        output = output " ZZZ02ZZZ,";
        output = output " current timestamp,";
        output = output " ZZZC3RZZZ);";

        print output
    }' /tmp/$MY_NAME.1.out > /tmp/$MY_NAME.2.out

实际上是逐行读取文件,其值由'^'

分隔

现在文件格式发生了变化,我需要使用位置对它进行分类。

旧文件格式:

"70075"^"RIVERSIDE SUBARU"^"100 CHENALL RD"^"LIT RCK"^"AR"^"72223-5981"^"A"^"5019990000"^"5014999008"^"N/A"^""^"334"^"MBF - SOUTHERN"^"T1010DC"^"D CLAIRE"^"Y"^"OWNERS INSURANCE CO"^20150501^""^""^"THE WINROCK GROUP, INC."^""^"Y"^+100.^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^""^""^""^""^""^^"Unknown"^"00"^"Z -M"^"A"^"MARKET #999 SPECIAL ENTITIES"^"D CLAIRE-T1900DC"^"98102"^"02"

(这是数据文件的第一行。)

现在新的文件格式就像

136324 70051 2015-02-01 36224 70900 1DR 136326 70023 2015-02-01 36326 70050 YY1WS 136328 70024 2015-02-01 36328 70061 YY1WS

(这是数据文件的第一行。) *每个记录是固定大小的第一个记录是5个字符,第二个是1个字符,它们之间没有任何分隔符。

所需输出: 我必须捕获前五个字符的记录,并从五个字符值的位置30开始记录。

谢谢。

1 个答案:

答案 0 :(得分:0)

谢谢@shelter

  

您可能需要知道的是awk,就像java有子串函数一样。原型是substr(“string”,stPos,len)。如果你现在   有一个固定长度的记录,你改变你的$ 115引用   像...... substr($ 0,300,3)。 (从整行($ 0),转到   位置300,值3个字符。

这就是我要找的东西。 substr(“string”,stPos,len)就是我所需要的