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
,并检查时间戳。