Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell Unix脚本:使用“写入”命令写入另一个文件:&引用;失败了_Shell_Unix_Scripting_Grep - Fatal编程技术网

Shell Unix脚本:使用“写入”命令写入另一个文件:&引用;失败了

Shell Unix脚本:使用“写入”命令写入另一个文件:&引用;失败了,shell,unix,scripting,grep,Shell,Unix,Scripting,Grep,我在一个文件中有以下记录(以及许多其他此类记录) 9460 xyz abc (lmn):1027739543798. Taxpayer's identification number (INN): 123. For all IIB. 2016/02/03 我需要搜索关键字IIB。如果匹配,那么我需要获取整个记录并写入另一个文件 cat keyword.cfg | while read KwdName do echo "KEYWORD:"${KwdName}

我在一个文件中有以下记录(以及许多其他此类记录)

9460    xyz            abc (lmn):1027739543798. Taxpayer's identification number (INN): 123. For all IIB. 2016/02/03
我需要搜索关键字IIB。如果匹配,那么我需要获取整个记录并写入另一个文件

cat keyword.cfg | while read KwdName
do
    echo "KEYWORD:"${KwdName} //This prints IIB
    grep "^${KwdName}\|${KwdName}\|~${KwdName}~\|:${KwdName}$\|:${KwdName}~" ${mainFileWithListOfRecords} | awk -F ":" '{print $1}' >> ${destinationFile}
done
下面是已经存在的代码。此代码不起作用。此代码的问题是当它使用完全匹配的 记录时,它将忽略“:”之后的文本并写入另一个文件

cat keyword.cfg | while read KwdName
do
    echo "KEYWORD:"${KwdName} //This prints IIB
    grep "^${KwdName}\|${KwdName}\|~${KwdName}~\|:${KwdName}$\|:${KwdName}~" ${mainFileWithListOfRecords} | awk -F ":" '{print $1}' >> ${destinationFile}
done
所以,不要将下面的记录写入目标文件

9460    xyz            abc (lmn):1027739543798. Taxpayer's identification number (INN): 123. For all IIB. 2016/02/03
只是写,

9460    xyz            abc (lmn)
cat-vte主文件和记录列表
给出以下输出

9460^IMEZHPROMBANK^I^ICJSC ;IIB;~ Moscow, (lmn): 1027739543798. Taxpayer's identification number (INN): 123. For all IIB. 2016/02/031#msid=s1448434872350^IC1^I2000/12/28^I2015/11/26^I^I$

当然,它会在冒号上切割-你是这样编程的。在您的代码中,您有
|awk-F:“{print$1}”
,这基本上意味着“扔掉从第一个冒号开始的所有内容”


如果您不想这样做,为什么要明确请求它?编写
awk
命令时,您的初衷是什么?

短修复程序正在替换

awk -F ":" '{print $1}'

但是你在切什么?也许
${mainFileWithListOfRecords}
是一个带有文件列表的变量。在这种情况下,grep将在匹配文件前面显示匹配文件。您可以使用-h选项进行更改。 结果是,您不需要剪切或awk:

grep -h "${KwdName}" ${mainFileWithListOfRecords} >> ${destinationFile}

(我也更改了搜索字符串,在搜索字符串中使用了
\\\\${KwdName}\\\\
,您将在所有组合中匹配KwdName)

谢谢。但是,keyword.cfg文件包含要匹配的关键字列表。比如keyword.cfg包含-IIB PCT DFD等,我只是以IIB为例。如果IIB不匹配,那么它应该尝试匹配PCT,然后是DFD等等..不。它不起作用:)。结果是一样的。它只打印到“:”。那之后我就不写记录了,我没听清楚。Keyword.cfg文件不包含“:”。它只包含IIB DFD ect。mainFileWithListOfRecords包含“:”而不是配置文件。发布问题中的
cat-vte“$mainFileWithListOfRecords”
的输出我已根据您的要求编辑了我的问题。我删除了
|awk-F:“
并重新运行脚本。即使这样,它也会扔掉从第一个冒号开始的所有东西。不可能。使用
set-x运行它,看看发生了什么。发布输出。也许您在重定向中有一个输入错误,并且仍在查看旧的$destination\u文件?对生成的文件执行
ls-l
,并检查时间戳。