我是一名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开始记录。
谢谢。
答案 0 :(得分:0)
谢谢@shelter
您可能需要知道的是awk,就像java有子串函数一样。原型是substr(“string”,stPos,len)。如果你现在 有一个固定长度的记录,你改变你的$ 115引用 像...... substr($ 0,300,3)。 (从整行($ 0),转到 位置300,值3个字符。
这就是我要找的东西。 substr(“string”,stPos,len)就是我所需要的