AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-231571

WashichawbachaW's questions

Martin Hope
WashichawbachaW
Asked: 2018-11-01 03:54:18 +0800 CST

当提供的变量具有空值时,日期命令输出 null/nothing

  • 0

date当提供的变量没有/空值时,命令如何输出空/无。我知道if else语句可以做到这一点,但我觉得这不是正确的方法。是否有合适的命令或更改date命令来执行此操作?

例如

myDay=""
bDay=`date -d "$myDay"`
echo "$bDay" // this should have no output
date
  • 1 个回答
  • 336 Views
Martin Hope
WashichawbachaW
Asked: 2018-04-03 22:25:28 +0800 CST

文本处理:如何按由字符串分隔的日期对列表进行排序

  • 0

我想file.txt按日期对内容进行排序。要排序的日期在第四个表格数据<td></td>标签中

例如内容file.txt:

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>

期望的输出:我该怎么做?

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>

我一直在使用sort命令,但它不起作用。

cat file.txt 2> /dev/null | sort -t'>' -k9n -k9.4M -k9.7n

编辑:我找到了这个参考链接,但仍然无法正常工作。 https://stackoverflow.com/a/16060031/7842707

text-processing sort
  • 1 个回答
  • 170 Views
Martin Hope
WashichawbachaW
Asked: 2018-02-14 22:28:53 +0800 CST

如何仅打印 1 个文件名和匹配的模式?

  • 1

我想将文件名/s 与匹配模式一起打印,但即使模式匹配在文件中多次出现,也只能打印一次。

例如,我有一个模式列表;list_of_patterns.txt我需要找到文件的目录是/path/to/files/*.

list_of_patterns.txt:

A
B
C
D
E

/路径/到/文件/

/file1
/file2
/file3

假设有多次这样/file1的模式:A

/文件1:

A
4234234
A
435435435
353535
A

(同样适用于有多个模式匹配的其他文件。)

我有这个 grep 命令正在运行,但是每次模式匹配时它都会打印文件名。

grep -Hof list_of_patterns.txt /path/to/files/*

输出:

/file1:A
/file1:A
/file1:A
/file2:B
/file2:B
/file3:C
/file3:B
... and so on.

我知道 sort 可以在 grep 命令之后通过管道执行此操作,grep -Hof list_of_patterns.txt /path/to/files/* | sort -u但它仅在 grep 完成时执行。在现实世界中,我list_of_patterns.txt的内部有数百种模式。有时需要一个小时才能完成任务。

有没有更好的方法来加速这个过程?

更新:一些文件有超过一百次匹配模式。例如/file4,模式出现A900 次。这就是为什么需要grep一个小时才能完成的原因,因为它会打印每次出现的模式匹配以及文件名。

例如输出:

/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
/file4:A
... and so on til' it reach 900 occurrences.

我只希望它只打印一次。

例如期望的输出:

/file4:A
/file1:A
/file2:B
/file3:A
/file4:B
text-processing performance
  • 1 个回答
  • 230 Views
Martin Hope
WashichawbachaW
Asked: 2018-02-09 02:07:44 +0800 CST

文本处理 - 如何在第一次出现模式 B 匹配行之前获取模式 A 匹配行?

  • 1

我想以相反的顺序获取从模式A匹配行到第一次出现的模式B匹配行以及它通过的行的行。

更新:example_file.txt

ISA*00*          *00*          *ZZ*SIX-SIX6      *12*666666666666     *66666666*6666*U*666666666*6666666666*0*P*\
GS*FA*SIX-SIX-SIX*666666666*6666666*6666*6666*X*66666
ST*666*666
AK1*SX*666
AK2*777*6666666
AK5*A
AK2*777*7777777
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*R*5
AK2*777*6666666
AK5*A
AK2*777*69696969
AK3*J7*5**3
AK4*3*6969*4
AK5*R*5
AK9*P*20*20*19
SE*69*6969
GE*1*6767
IEA*1*0000000000

我想要的是,从下到上,得到它后面的所有AK5模式R,如下所示:

模式一:AK5*R

并让所有的线上升,直到模式B的第一次出现被匹配。例如:

模式乙:AK2

期望的输出:

第一个匹配的模式A将被称为E1

AK2*777*7777777
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*R*5

更新:匹配的第二个模式A将称为E2

AK2*777*69696969
AK3*J7*5**3
AK4*3*6969*4
AK5*R*5

如果有超过 1 个模式A匹配,则依此类推。

编辑:我知道sed可以做到这一点,但我仍然没有运气从每个模式 A 匹配到它第一次出现的模式 B 匹配并将它们存储在临时文本文件中以供进一步处理。

这是我的示例命令,sed它获取example_file.txt

sed -ne '/AK2\*/,/\AK5\*R/p' example_file.txt

示例命令逻辑场景:

A="AK5\*R"
B="AK2"

find the first $A < example_file.txt; # AK5\*R
move to previous line until first occurrence of $B line; # AK2*any_number*any_number
get all lines from first $A to its first occurrence of $B and store in a text file; # result > e1.txt
# The same way goes to the second occurrence of pattern A.

(注意:$B 的第一次出现意味着,从每个 $A 行开始获取 $A 行和之前的行,直到它遇到的第一个 $B 匹配行。例如,如果第一个 $A 行从 a 的中间行开始如果文件总共有 100 行,则文件类似于第 50 行,然后从那里移动到上一行,直到命令遇到它看到的第一个 $B 行。)请参见下面的示例。

example_file2.txt

ISA*00*          *00*          *ZZ*SIX-SIX6      *12*666666666666     *66666666*6666*U*666666666*6666666666*0*P*\
GS*FA*SIX-SIX-SIX*666666666*6666666*6666*6666*X*66666
ST*666*666
AK1*SX*666
AK2*777*6666666
AK5*A
AK2*777*7777777
AK5*A
AK2*777*888888
AK5*A
AK2*777*7777777
AK5*A
AK2*777*5555555
AK5*A
AK2*777*7777777
AK5*A
AK2*777*4545435
AK5*A
AK2*777*7777777
AK5*A
AK2*777*7777777
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*A
AK2*777*0987654
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*R*5
AK2*777*7777777
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*A
AK2*777*7777777
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*A

输出:

AK2*777*0987654
AK3*S6*5**3
AK3*A2*5**3
AK4*3*6969*4
AK4*7*6969*4
AK5*R*5
text-processing sed
  • 2 个回答
  • 235 Views
Martin Hope
WashichawbachaW
Asked: 2018-01-05 01:12:48 +0800 CST

文本处理 - 如何从文件中按顺序获取多个模式

  • 0

我有这个file.txt.Z包含这个:

AK2*856*1036~AK3*TD1*4**~AK4*2**1*~AK4*7**1*~AK3*TD5*5**~AK4*3**6*2~AK3*REF*6**~AK4*2**1*~AK3*REF*7**~AK4*2**1*~AK3*REF*8**~AK4*2**1*~AK3*DTM*9**~AK4*2**4*20~AK4*2**4*20~AK3*CTT*12**7~AK5*R
AK2*856*1037~AK3*HL*92**~AK4*3**7*O~AK5*R~AK9*R*2*2*0~SE*25*0001~GE*1*211582~IEA*1*000211582

每条记录都包含几个以标头(通常带有数字)开头的字段AK,以 . 分隔~。如果你用~缩进的换行符替换它,它将显示为:

AK2*856*1036
  AK3*TD1*4**
  AK4*2**1*
  AK4*7**1*
  AK3*TD5*5**
  AK4*3**6*2
  AK3*REF*6**
  AK4*2**1*
  AK3*REF*7**
  AK4*2**1*
  AK3*REF*8**
  AK4*2**1*
  AK3*DTM*9**
  AK4*2**4*20
  AK4*2**4*20
  AK3*CTT*12**7
  AK5*R
AK2*856*1037
  AK3*HL*92**
  AK4*3**7*O
  AK5*R
  AK9*R*2*2*0
  SE*25*0001
  GE*1*211582
  IEA*1*000211582

每个字段都有由 分隔的子字段*。例如,子字段AK201是标题之后的第一个字段AK2,因此它856用于示例行。

如您所见,有 2 行的起始字符串为AK2. 这就像一个行标题,或者我们称之为段标题。中有两个段头file.txt.Z。我想要的是按顺序从每个段标题中获取这些数据:

所需数据:

  • AK202(标题后的第二个字段AK2)-AK2*856*this_numeric_value在星号或~.之前
  • AK301(标题后的第一个字段AK3)-~AK3*this_string_value在*or之前~。
  • AK502(标题后的第二个字段AK5)-~AK5*some_string_value*this_numeric_value在*or之前~。
  • AK401(标题后的第一个字段AK4)-~AK4*this_numeric_value在*or之前~。
  • AK4来自或字段的每个数值AK5都应始终至少为 2 位。例如 AK502 = 2;AK502 = 02 或 AK401 = 9;AK401 = 09。
  • 如果没有AK3字段,则不输出任何内容。(我已经有一个脚本)
  • 如果一行包含多个 AK3-AK5-AK4 序列,它们应该与空格连接
  • 如果该AK5字段在该字段之后丢失,请改为AK3查找字段。AK4
  • 如果字段之后既没有an也AK4没有字段,则只输出AK301(AK3头之后的第一个字段)。AK5AK3
  • 如果一个AK4字段后有多个AK3字段,请用逗号连接 AK502-AK401-sequences

输出:

GS: 1036 - TD102,07 TD503 REF02 DTM02,02 CTT
GS: 1037 - HL03

这个怎么做?只要问我你是否对我的问题感到困惑。

编辑:这是我的代码:这是在一个while循环中

while read FILE
do
    AK2=`zgrep -oP 'AK2.[\w\s\d]*.\K[\w\s\d]*' < $FILE`
    AK3=`zgrep -oP 'AK3.\K[\w\s\d]*' < $FILE`
    AK5=`zgrep -oP 'AK5.[\w\s\d]*.\K[\w\s\d]' < $FILE`
    AK5_ERROR=`if [[ $AK5 =~ ^[0-9]+$ ]]; then  printf "%02d" $AK5 2> /dev/null; else 2> /dev/null; fi`
    AK4=`zgrep -oP 'AK4.\K[\w\s\d]*' < $FILE`
    AK4_ERROR=`if [[ $AK4 =~ ^[0-9]+$ ]]; then  printf "%02d" $AK4 2> /dev/null; else 2> /dev/null; fi`

    if [[ $AK3 ]]
    then
        if $AK5 2> /dev/null
        then
            echo "GS: $AK2 - $AK3$AK4_ERROR"
        else
            echo "GS: $AK2 - $AK3$AK5_ERROR"
        fi
    else
        echo "Errors are not specified in the file."
    fi
done < file.txt.Z

我的原始代码的问题是它没有连接$AK3and, $AK5or $AK4。

text-processing
  • 2 个回答
  • 137 Views
Martin Hope
WashichawbachaW
Asked: 2017-12-22 01:29:34 +0800 CST

文本处理 - 如何输出与所有行中的模式匹配的文件

  • 2

我有这个file.txt包含这个列表。

LIST: ACCEPTED - rfhfui4fuw3hjnf43.4fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.4fj9u8fhjkszdnvckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf43.4f.j9u8fhjkszdnv.ckizfjh489.dfsdf
LIST: ACCEPTED - rfhfui4fuw3hjnf.43.4fj9u8fhjkszdnvckizfjh489.dfsdf

我想要发生的是知道是否file.txt所有的行都匹配我想要找到的模式。

例如,如果模式匹配thenACCEPTED的所有行。file.txtecho "All lines are Accepted"

我认为grep有这个问题的答案,但我仍在尝试,仍然没有运气。

我想在一个if...else条件下使用它。

grep text-processing
  • 1 个回答
  • 66 Views
Martin Hope
WashichawbachaW
Asked: 2017-12-06 19:02:20 +0800 CST

文本处理 - 如何对具有来自不同目录的重复文件名的查找输出进行唯一排序?

  • 1

我想在任何目录中对 find 命令的输出进行唯一排序,而不需要重复的文件名。

find /path/to/first_directory/* /path/to/second_directory/* /path/to/third_directory/* -mtime -1 -name "filename_pattern*"

示例输出:

/path/to/first_directory/sample_file1_2017Dec25.dat
/path/to/first_directory/sample_file2_2017Nov01.dat
/path/to/first_directory/sample_file3_2017Oct08.dat
/path/to/first_directory/archive/sample_file1_2017Dec25.dat.Z
/path/to/first_directory/archive/sample_file2_2017Nov01.dat.Z
/path/to/second_directory/sample_file4_2017Sep11.dat
/path/to/second_directory/sample_file5_2017Oct05.dat
/path/to/third_directory/sample_file1_2017Dec25.dat
/path/to/third_directory/sample_file2_2017Nov01.dat
/path/to/third_directory/sample_file3_2017Oct08.dat
/path/to/third_directory/sample_file4_2017Sep11.dat
/path/to/third_directory/sample_file5_2017Oct05.dat
/path/to/third_directory/sample_file6_2017July04.dat
/path/to/third_directory/sample_file6_2017June12.dat
/path/to/third_directory/sample_file7_2017May01.dat

从输出中您可以看到 and 中有重复的文件名,/first_directory/并且/first_directory/archive/所有文件都来自/first_directory/*and/second_directory/*也在 inside 中/third_directory/*。意思就是说/third_directory/*是和中找到的所有文件的归档目录,/first_directory/*但/second_directory/*也有只能在/third_directory/*( check sample_file6and sample_file7)中找到的文件

我想要打印的是按此顺序从/first_directory/到/first_directory/archive/到/second_directory/到的文件/third_directory/,没有重复,并且还按日期排序。

期望的输出:

/path/to/first_directory/sample_file1_2017Dec25.dat
/path/to/first_directory/sample_file2_2017Nov01.dat
/path/to/first_directory/sample_file3_2017Oct08.dat
/path/to/second_directory/sample_file4_2017Sep11.dat
/path/to/second_directory/sample_file5_2017Oct05.dat
/path/to/third_directory/sample_file6_2017July04.dat
/path/to/third_directory/sample_file6_2017June12.dat
/path/to/third_directory/sample_file7_2017May01.dat
text-processing find
  • 1 个回答
  • 274 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve