Unix Shell脚本-如何使用位置delimeter逐行读取文件中的值

Unix Shell脚本-如何使用位置delimeter逐行读取文件中的值,shell,unix,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

我是一名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
这实际上是逐行读取文件,其中的值由“^”确定

现在文件格式正在更改,我需要使用position将其删除

旧文件格式:

"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位开始记录

谢谢你。

谢谢你@庇护所

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


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

您所说的“使用位置分隔它”是什么意思?您的意思是每个记录都是固定大小的,没有任何分隔符吗?“现在文件格式正在更改”您可能希望显示一个新文件格式的示例。这将是文件的单行@jwodder yes每个记录都是固定大小的第一个记录有5个字符,第二个记录有1个字符,这两个字符之间没有任何分隔符them@JAVAUSER将示例行放在可以充分利用stackoverflow格式选项的地方,而不是模糊地散布在多个注释上。不要让我们猜“这”是什么意思。把一切都说清楚。正如一个例子,您的代码使用了
$115
,但您的注释中没有任何内容表明在您的新格式中我们会在哪里找到它。对于给定的输入行,显示所需的输出。同意上面的所有评论。您可能需要知道的是,
awk
,就像
java
有一个子字符串函数一样。原型是
substr(“string”,stPos,len)
。如果您现在有固定长度的记录,您可以将
$115
引用更改为类似
。。。。substr($0300,3)
。(从整行($0)开始,转到position300,取3个字符的值)。祝你好运