我正在使用带-f选项的grep。
$grep -f pattern_list.txt data.txt
在屏幕上,我看到ENTIRE data.txt,屏幕上突出显示匹配的模式(来自pattern_list.txt文件)。所以我相信搜索没问题。但是我想只获得那些带有pattern_list.txt中模式的行而不是整个文件中带有一些亮点的行。
那是因为当我尝试将结果存储在单独的文件output.txt中时,我得到了data.txt的副本!!这是一致的:无论我在屏幕上得到什么结果都转移到output.txt并且高亮显示都会丢失。在任何情况下,我都对过滤输出感兴趣,只有那些模式匹配而不是突出显示的行。
我尝试了两个具有相同结果的重定向=>
$grep -f pattern_list.txt data.txt > output.txt
$grep -f pattern_list.txt data.txt >> output.txt
我认为它不相关,但我使用的是Linux Mint
/ * ********************** * / Jotne要求提供示例文件。 原始文件太大了。我也不确定 分享内容(他们是公开的,这个 不是商业用途,但谁知道)所以我给了编辑 版本。
* 我检查过行为与编辑版本相同。
这些是股票名称/代码和相关数据。 两组不同的信息在不同的文件中。 一组较小,另一组较大。 我把这些名字从小组中取出并需要 来自其他文件的那些股票的相应数据。
* 我认为这与grep报告的方式有关 - 突出显示vs只给出结果中的那些行 而不是这些特定的文件。但这是 反正的例子。
pattern_list.txt(每个名称后面都有一个空格)
ABIRLANUVO
ACC
ADANIENT
ADANIPORTS
ADANIPOWER
ALBK
AMBUJACEM
ANDHRABANK
APOLLOHOSP
APOLLOTYRE
ARVIND
ASHOKLEY
ASIANPAINT
AUROPHARMA
AXISBANK
BAJAJ-AUTO
BANKBARODA
BANKINDIA
BATAINDIA
BHARATFORG
BHARTIARTL
BHEL
BIOCON
data.txt中
20MICRONS EQ 34.4 34.45 33 33.55 33.4 33.65 77560 2615090.75 604 144J01027
3MINDIA EQ 4802.35 4900 4721 4845.95 4899 4879.05 363 1750264.35 126 470A01017
8KMILES EQ 166.05 182 166.05 177.2 174.95 172.15 2155 381502.85 58 650K01013
A2ZMES EQ 26.3 26.3 26.3 26.3 26.3 25.05 206927 5442180.1 280 619I01012
AARTIDRUGS EQ 529.15 553.8 509.85 531.9 534.55 529.05 12118 6394851.8 852 767A01016
AARTIIND EQ 215 218.7 203.1 206.35 203.2 214.85 210984 44316179.1 3499 769A01020
AARVEEDEN EQ 45.15 49.25 45.1 47 46.45 46.35 3356 157493.35 131 273D01019
ABAN EQ 815 825 715 736.65 732 809.25 5633124 4204164243.15 154066 421A01028
ABB EQ 1048.6 1094 1033.45 1062.55 1056.15 1050.6 99591 105627217.75 3025 117A01022
ABBOTINDIA EQ 2130.05 2189 2101.05 2131.3 2102 2184.3 1354 2915165.8 255 358A01014
ABCIL EQ 202 209.85 195 201.85 199.05 202.85 28103 5702324.45 998 605B01016
ABGSHIP EQ 257.1 264 250 258.7 257.3 259.65 61733 15948215.4 2225 067H01016
ABIRLANUVO EQ 1330 1400.95 1323.2 1370.15 1366.75 1330.85 265037 362100560.5 16500 069A01017
ACC EQ 1435.1 1487.8 1411 1458.5 1458 1435.55 299862 435694414.85 20261 012A01025
ACCELYA EQ 701 721 700.1 705.3 703 705.35 11215 7949589.8 906 793A01012
ACE EQ 28.1 29.45 27.45 28.75 28.9 28.05 543699 15821414.15 1272 731H01025
ACROPETAL EQ 3.9 4 3.8 4 4 3.9 51927 202669.1 88 055L01013
ADANIENT EQ 444.1 468.9 423.8 444.55 439.1 444.05 3930067 1762074365.95 62256 423A01024
ADANIPORTS EQ 267.25 285.4 252.35 270.3 271.05 264.9 9128261 2454070463.55 87896 742F01042
ADANIPOWER EQ 58.05 62 56.3 59.5 59.45 57.7 20394362 1210636361.9 54378 814H01011
ADFFOODS EQ 60.15 64.9 58.55 62.9 62.5 62 84037 5233103 1115 982B01019
ADHUNIK EQ 50.2 52 49.4 50.45 49.9 50.7 115288 5841753.15 815 400H01019
ADSL EQ 20.75 21.75 20 21.25 21.3 20.75 29963 632240.4 186 102I01027
ADVANIHOTR EQ 44 46 43 44.05 44.95 45.5 348 15350.8 18 199C01026
AEGISCHEM EQ 243.95 256.9 239 244.15 242.95 244 35887 8835424.65 1511 208C01017
AFL EQ 46.5 46.65 44.75 45.85 45.8 47 2738 125420.4 23 020G01017
/ * ******************* * /
编辑2:我不知道为什么但是这些线条在描述中出现了一堆。这里的编辑窗口似乎很完美。这可能是一个线索吗?与换行符相关的事情???
/ * ********************* * /
编辑3: 感谢perreal的编辑,上面的“编辑2”评论得到了处理,线条看起来是分开的。一个建议是检查grep是否将文件理解为一行(就像在编辑2时看到的那样聚集在一起。所以,我执行了一个基本的grep -e,如下所示:
$grep -e ACC data.txt
我喜欢以下两行:
ACC EQ 1435.1 1487.8 1411 1458.5 1458 1435.55 299862 435694414.85 20261 012A01025
ACCELYA EQ 701 721 700.1 705.3 703 705.35 11215 7949589.8 906 793A01012
所以,我认为grep会在-e选项下逐行查看该文件。仅供参考,ACC在屏幕上的两个实例中都突出显示。重定向(>)到temp.txt也是成功的。只有在-f选项下,grep才会抛出屏幕上突出显示的匹配模式和重定向中的副本。
最后一点,(现在!)是完整的文件grep -f喷出的是逐行而不是成束:在屏幕上以及重定向中。感谢。
/ * ******** * /
编辑4:
纯粹没有时间紧缩我刚接受了pattern_list.txt并添加了:
grep -w
在每一行之前和
data.txt >> output.txt
每行之后。
将其保存为.sh文件,更改权限u + x并运行脚本。 没有循环,条件,没有。 SAD。
我当然希望了解并尽可能解决grep -f难题。 另外一些关于各种文本格式的指针也会有所帮助。 因为当我将输出移植回LO Calc并添加了另一个信息文件时, 我可以“看到”两个相同的列,但如果我比较它们,一些相应的单元格被视为相同但有些不相同。但那些阙和exmpls sm在其他时间/地点。我认为这一切都与软件/应用程序/命令如何看待和处理文本并向用户显示有关。谢谢。
答案 0 :(得分:1)
由于我不知道的原因,以下命令直接起作用。 仅供参考。
$fgrep -f pattern_list.txt data.txt
不是" grep"但是" fgrep"。 感谢您的兴趣和时间。