【问题标题】:Unix scripting : Writing to another file with ":" is failingUnix脚本:用“:”写入另一个文件失败
【发布时间】:2016-02-03 06:53:21
【问题描述】:

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

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$

【问题讨论】:

  • 谢谢。但是,keyword.cfg 文件包含要匹配的关键字列表。像keyword.cfg 包含-IIB PCT DFD 等。我只是以IIB 为例。如果 IIB 不匹配,那么它应该尝试匹配 PCT,然后是 DFD 等等..
  • 不。它没有用:)。结果是一样的。它只打印到 ":" 。之后就不写记录了
  • 我没听懂你。 Keyword.cfg 文件不包含 ":" 。它只包含 IIB DFD 等。 mainFileWithListOfRecords 包含“:”
  • 不是配置文件。发布有问题的cat -vte "$mainFileWithListOfRecords" 的输出
  • 我已经按照您的要求编辑了我的问题。

标签: shell unix scripting grep


【解决方案1】:

简短的修复正在替换

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

cut -d ":" -f2-

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我删除了| awk -F ":" 并重新运行脚本。即使这样,它也会从第一个冒号开始丢弃所有内容。
    • 不可能。使用set -x 运行它,看看发生了什么。发布输出。
    • 也许您在重定向中有错字并且仍在查看旧的 $destination_file?在结果文件中执行ls -l 并检查时间戳。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多