我把下面的记录(和其他许多这样的记录)放在一个文件中。
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
因此,与其将下面的记录写入目标文件
9460 xyz abc (lmn):1027739543798. Taxpayer's identification number (INN): 123. For all IIB. 2016/02/03
只是写作而已,
9460 xyz abc (lmn)
cat -vte mainFileWithListOfRecords
提供以下输出
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$
发布于 2016-02-03 13:31:57
短期修复正在取代
awk -F ":" '{print $1}'
使用
cut -d ":" -f2-
但你要剪什么?也许${mainFileWithListOfRecords}
是一个包含文件列表的变量。在这种情况下,grep将在其匹配的前面显示匹配的文件。您可以使用-h选项来更改它。其结果是,您不需要切割或awk:
grep -h "${KwdName}" ${mainFileWithListOfRecords} >> ${destinationFile}
(我也更改了搜索字符串,在搜索字符串中使用\|${KwdName}\|
,您将在所有组合中匹配KwdName )
发布于 2016-02-03 00:07:32
当然,它切断了冒号--你是这样编程的。在您的代码中,您有| awk -F ":" '{print $1}'
,这基本上意味着“丢弃从第一个冒号开始的所有内容”。
如果您不想这样做,为什么要显式地请求它?在编写awk
命令时,您的初衷是什么?
https://stackoverflow.com/questions/35170368
复制相似问题