小编Ini*_*ian的帖子

Bash 脚本在匹配后打印单词

我正在尝试通过 bash 脚本检查时钟是否同步。

所以首先我执行了timedatectl输出以下内容的命令:

Local time: Mi 2021-03-17 12:52:53 CET
              Universal time: Mi 2021-03-17 11:52:53 UTC
                    RTC time: Mi 2021-03-17 11:52:53
                   Time zone: Europe/Berlin (CET, +0100)
   System clock synchronized: yes
   systemd-timesyncd.service active: yes
             RTC in local TZ: no
Run Code Online (Sandbox Code Playgroud)

因此我们的目标是获得的价值System clock synchronizedyes,它分配给一个变量并打印。因此我做了以下工作:

1-# check if time synchronized
2-syncTime="$(timedatectl | grep 'System clock')" # returns the whole line
3-echo "$syncTime"# make sure the line is saved
4-ifTimeSynched="$( $syncTime | grep -oP 'synchronized: \K\w+')"  # this supposes …
Run Code Online (Sandbox Code Playgroud)

grep

1
推荐指数
1
解决办法
78
查看次数

awk 按最后一列排序并打印整行

如何按排序$NF|"sort -u"然后打印整行

原始数据:

column1                 COlumn2                 column3
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0002 1.40 Feb 05 2019 I42 v2.04 (04/18/2019)  ov0002
ov0001 1.46 Jul 25 2019 I42 v2.14 (09/05/2019)  ov0001
ov0001 1.45 Jun 27 2019 I42 v2.32 (03/09/2020)  ov0001 …
Run Code Online (Sandbox Code Playgroud)

awk

1
推荐指数
2
解决办法
109
查看次数

将文件名列添加到数百个文件 bash

我有数百个约 1000 万行的全基因组关联研究文件。对于file1.txt

SNP BP B   SE   P
123 12 0.1 0.01 0.1
...
Run Code Online (Sandbox Code Playgroud)

我想在每个文件的末尾添加一列,其中只包含该文件的名称,以便最终结果file1.txt是:

SNP BP B   SE   P   name
123 12 0.1 0.01 0.1 file1.txt
...
Run Code Online (Sandbox Code Playgroud)

我想对数百个文件执行此操作。目前我可以使用以下方法添加一列:

for file in *.txt; do awk 'BEGIN{OFS="\t"}{print $0, FILENAME}' $file; done
Run Code Online (Sandbox Code Playgroud)

这将打印整个文件,但不会覆盖现有文件。我只想向已经存在的数据框添加一列。任何建议非常感谢!

awk sed

1
推荐指数
1
解决办法
101
查看次数

根据shell脚本中的模式提取字符串

我正在编写一个脚本并停留在必须根据模式提取字符串的地方。我曾尝试使用 awk 和 cut 但无法获得正确的结果。

这些是我的文件中的 3 行,我希望提取最后一列

预期产出

  1. MxMonitor_Marvel_PI49
  2. 警报管理器
  3. MxMonitor_Marvel_PI49

我尝试了下面最接近的一个,但它只提取了几行而不是全部。

awk  -F"," '{print $10}' Filename.txt
Run Code Online (Sandbox Code Playgroud)

文件内容

./subsearch_nested_fa89eeb0810630b9_1626351940.6/metadata.csv:2:"read : [ admin ], write : [ admin ]",admin,"MxMonitor_Marvel_PI49",300
./scheduler__nobody_YWxlcnRfbWFuYWdlcg__RMD5922da96313b0bb40_at_1626282000_20762/metadata.csv:2:"read : [ splunk-system-user ], write : [ splunk-system-user ]","splunk-system-user","alert_manager",86400
./subsearch_admin__admin_TXhNb25pdG9yX01hcnZlbF9QSTQ5__search12_1626351937.20757776_1626351938.1/metadata.csv:2:"read : [ admin ], write : [ admin ]",admin,"MxMonitor_Marvel_PI49",300
Run Code Online (Sandbox Code Playgroud)

shell awk cut

1
推荐指数
1
解决办法
65
查看次数

如何使用 jq 有条件地生成所有 JSON 路径

我有任意嵌套的 JSON 对象,类似于下面的内容。

{
  "parent1" : "someval"`,
  "parent2" : {
     "a" : "someval",
     "b" : "someval"
   },
  "parent3" : {
     "child1" : { 
        "a" : "someval"
      },
     "child2" : { 
        "b" : "someval"
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我需要递归地遍历它们并检查是否有任何父项有子键ab或两者,并生成该父项的 JSON 路径,如下所示:

Output:
parent2 
parent3.child1
parent3.child2
Run Code Online (Sandbox Code Playgroud)

我尝试过使用

jq -r 'path(..) | map (. | tostring) | join (".")
Run Code Online (Sandbox Code Playgroud)

这可以帮助我生成所有路径,但我还没有找到一种方法来成功地组合诸如 之类的has("a")条件path。我怎样才能实现这一目标?

json path jq

1
推荐指数
1
解决办法
284
查看次数

用awk替换双引号双引号

我正在用awk编写一个脚本,用文件夹中所有文件的双重双引号替换所有双引号.

我在stackoverflow中发现了这个,但我得到了其他结果

awk 'BEGIN{FS=OFS="#"} {for (i=0;i<=NF;i++) gsub(/"/, "&&",$i)} 1 $f3 > $f2
Run Code Online (Sandbox Code Playgroud)

此示例示例的输出:

01##"hello world"98##
Run Code Online (Sandbox Code Playgroud)

01##""""hello world""""98##
Run Code Online (Sandbox Code Playgroud)

我想得到

01##""hello world""98##
Run Code Online (Sandbox Code Playgroud)

linux bash awk substring gsub

0
推荐指数
1
解决办法
484
查看次数

Linux命令提取给定名称的值

假设我有一个文本文件(EmployeeDetails.txt),其中写入了内容(新行中的所有名称/值),如下所述: -

EmployeeName=XYZ
EmployeeBand=D5
EmployeeDesignation=SSE
Run Code Online (Sandbox Code Playgroud)

我需要Linux命令,它将读取此文件EmployeeDetails.txt并为其提供值EmployeeBand.输出应该是

D5

unix linux shell

0
推荐指数
1
解决办法
88
查看次数

算术表达式的Bash脚本

#!/bin/bash
x=10
echo x=$x
z=20
echo z=$z
y= expr $x + $z
echo y=$y
Run Code Online (Sandbox Code Playgroud)

我想输出像:

x=10
z=20
y=30
Run Code Online (Sandbox Code Playgroud)

但它给出了如下错误:

x=10
z=20
30
y=
Run Code Online (Sandbox Code Playgroud)

bash

0
推荐指数
1
解决办法
26
查看次数

Linux:使用文件中的一个记录实例提取值

我只想提取那些在输入文件中只出现一次的记录

输入文件1

    CHEMBL184618
    CHEMBL184618
    CHEMBL198362
    CHEMBL198362
    CHEMBL218394
    CHEMBL218394
    CHEMBL221959
    CHEMBL221959
    CHEMBL24828 
    CHEMBL24827
Run Code Online (Sandbox Code Playgroud)

预期产出

    CHEMBL24828
    CHEMBL24827
Run Code Online (Sandbox Code Playgroud)

我已经完成了排序Filename.txt | uniq -d查找重复的ID并将它们保存在单独的文件中.然后我找到排序Filename.txt | uniq -c.第三步是从唯一ID中删除重复的ID.我想要一种有效的方法.

linux bash awk

0
推荐指数
1
解决办法
54
查看次数

根据来自CSV的列值获取行

我有以下数据的CSV

10.000.00.00,D3,1
10.001.00.00,C4,2
10.002.00.00,C5,2
10.000.88.99,B1,3
10.000.00.00,B2,3
10.000.00.00,C6,3
10.000.99.00,D1,3
Run Code Online (Sandbox Code Playgroud)

尝试下面的代码

cat Data.csv | awk -F , '$3 == "3" { print }'
Run Code Online (Sandbox Code Playgroud)

只需要获取最后值为3的行。

请让我知道该怎么做

awk

0
推荐指数
1
解决办法
160
查看次数

标签 统计

awk ×6

bash ×3

linux ×3

shell ×2

cut ×1

grep ×1

gsub ×1

jq ×1

json ×1

path ×1

sed ×1

substring ×1

unix ×1