AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

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

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
主页 / unix / 问题

问题[awk](unix)

Martin Hope
Enver
Asked: 2023-03-09 19:41:07 +0800 CST

捕获由开始和结束模式定义的多线区域

  • 6

我想从文件中打印一个中间部分(在开始模式和结束模式之间),特定的行会变色。

这是一个此类文件中的示例文本

## Beginning of file

Some text and code

## FAML [ASMB] KEYWORD
##  Some information.
##  Some other text.
##  Blu:
##  Some text in blue.
## END OF FAML [ASMB]

## Other text

More text and code

## FAML [ASMB] KEYWORD和之间的文本## END OF FAML [ASMB]将被提取(没有开头)并传递给将适当打印多行文本的##函数。luciferin

块之间的文本被丢弃。后续块的工作方式相同,通过调用函数提取并打印中间区域luciferin(rec)。该函数luciferin以彩色输出。

输入字符串luciferin为

Some information.
Some other text.
Blu:
Some text in blue.

这是捕获中间区域的 awk 脚本

BEGIN {
  beg_ere = "## [[:alnum:]]+ [[][[:alnum:]]+[]]"
  end_ere = "## END OF [[:alnum:]]+ [[][[:alnum:]]+[]]"
 }

match($0, beg_ere, paggr) { display = 1 }
$0 ~ end_ere { display = 0 ; next }
display { print }

这是一个luciferin函数,它接受一个字符串来输出颜色。cpt在颜色转义序列中,并且是多行输入字符串的astr[i]特定行。i

function luciferin(mstr) {
  cpt = tseq["Grn:"]
  nlines = split(mstr, astr, "\n")
  for (i = 1; i <= nlines; i++) {
    for ( knam in tseq ) {
      if ( knam == astr[i] ) { cpt = tseq[knam] ; break }
     }
    if (knam == str) { print "" } else { print cpt astr[i] rst }
   }

 }
awk
  • 2 个回答
  • 74 Views
Martin Hope
Marc
Asked: 2023-03-08 03:46:05 +0800 CST

将多个命令连接成一行结果

  • 5

我试图在一行中显示可用空间与我所有 mnt 文件夹的总空间。

我正在使用这个命令:

(df -h| grep 'mnt' | awk '{s+=$4} END {print s}') ; (df -h| grep 'mnt' | awk '{s+=$3} END {print s}')

不幸的是它产生了 2 行输出:

383
850

我想建立一个输出类似的命令

383/850

我觉得awk是正确的方法,但是上述命令的文档让我迷失了

awk
  • 1 个回答
  • 44 Views
Martin Hope
Alex
Asked: 2023-03-06 04:49:40 +0800 CST

如何使用 awk 替换字段 1 中特定字符的最后一次出现

  • 7

我正在尝试使用 awk 将第一个字段中最后一次出现的句点替换为分号。字段分隔符也是分号。

我(\.)(?!.*\1)在 regex101.com 上作为正则表达式进行了测试,当我提供“abcmp3”作为输入时,它正确地突出显示了句点的最后一次出现。

我在 awk 中尝试了以下操作:

awk 'BEGIN{FS=OFS=";"} {gsub(/(\.)(?!.*\1)/, ";", $1)} 1'

它不会取代任何东西。

我将不胜感激任何可以提供帮助的人。

awk
  • 2 个回答
  • 175 Views
Martin Hope
dima1002
Asked: 2023-03-05 00:58:41 +0800 CST

CSV 按第 3 列和前面的计数器排序

  • 2

我想从这张桌子

"ResNR";"ResNAME";"CustomerNAME";"CustomerID";"Date";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 1";"10272";"20.06.2017 10:35";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 2";"10207";"13.11.2017 14:08";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 2";"10328";"09.05.2018 09:22";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 1";"10189";"16.05.2018 17:47";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 3";"10189";"18.06.2018 20:07";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 1";"10229";"13.11.2018 11:14";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 2";"10348";"28.01.2019 09:06";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 3";"10340";"06.02.2019 11:13";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 1";"10349";"22.02.2019 17:06";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"
"12431";"TEST";"Kunde 2";"10333";"27.02.2019 20:18";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"

输出应该是这样的 一切都应该按客户名称排序。可以删除前 2 列。然后计数器必须进入第一列

Sold;CustomerNAME;CustomerID;Date;Column1;_1;_2;_3;_4;_5;_6;_7;_8;_9;_10;_11;_12;_13;_14;_15;_16;_17;_18;_19;_20;_21;_22;_23;_24;_25;_26;_27
s01;Kunde 1;10272;20.06.2017 10:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s01;Kunde 1;10189;16.05.2018 17:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;
S01;Kunde 1;10229;13.11.2018 11:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s01;Kunde 1;10349;22.02.2019 17:06;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s02;Kunde 2;10207;13.11.2017 14:08;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s02;Kunde 2;10328;09.05.2018 09:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s02;Kunde 2;10348;28.01.2019 09:06;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s02;Kunde 2;10333;27.02.2019 20:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s03;Kunde 3;10189;18.06.2018 20:07;;;;;;;;;;;;;;;;;;;;;;;;;;;;
s03;Kunde 3;10340;06.02.2019 11:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1. 所有内容都应按第 2 列排序。
  2. 然后应删除第 1 列和第 2 列
  3. 应添加已售出列。(新)
  4. 然后在第 1 列(已售出)中,只要客户 1 在第 2 列中,就应在每一行中插入 wer s01。如果客户 2 在第二列中,则第一列中的值应从 s01 上升到 s02 , ETC

我现在正在尝试脚本,不幸的是它不起作用。

sed 's/,/./g' |
awk -F";" 'BEGIN{
 oldRef=""
 OFS="\t"
}{
 if(NR==1){
  $1=$1
 }else{
  if($4 != oldRef){$1="s01";oldRef=$4}else{$1="s02"}
 }
 print $0
}' | column -t -o ";" -s $'\t'
awk
  • 3 个回答
  • 86 Views
Martin Hope
Enver
Asked: 2023-03-01 03:37:42 +0800 CST

带有可选参数的 awk 函数

  • 5

ngt这是允许awk 函数的可选用户参数的好方法吗?

function nbstring(str, ngt) {
  ## Test whether string STR is non-blank.
  ## Return true when STR is non-blank.
  if (length(gensub(/[[:blank:]]+/, "", "g", str)) > 0) {
   if ( ngt == "dump" ) { print "return 1 for " str }
   return 1
  } else {
   if ( ngt == "dump" ) { print "return 0 for " str }
   return 0
  }
 }

我也用过条件

if (str && length(gensub(/[[:blank:]]+/, "", "g", str)) > 0) {

我得到了相同的结果。

因此,我认为不需要做str &&,对吧?

awk
  • 2 个回答
  • 69 Views
Martin Hope
ychaouche
Asked: 2023-02-26 18:19:27 +0800 CST

如何在 awk 中打印前导零(填充)?

  • 8

我正在尝试99.11111按.099.11AWK

我尝试了以下变体但没有成功。

$ awk '{printf ("%000.2f\n", $1);}' <<< 99.111111
99.11
$ awk '{printf ("%3.2f\n", $1);}' <<< 99.111111
99.11
$ awk '{printf ("%03.2f\n", $1);}' <<< 99.111111
99.11
awk
  • 1 个回答
  • 189 Views
Martin Hope
Enver
Asked: 2023-02-25 23:00:09 +0800 CST

在没有关键字的情况下捕获## HD [OPCON]

  • 2

我在 awk 文件中使用了以下正则表达式

beg_ere = "^[[:space:]]*([#;!/]{2}|@c)[[:space:]]+(HD) [[](OPCON)[]] .*[[:space:]]*$"

有了它,我可以匹配以下几行

## HD [OPCON] this,that
## HD [OPCON] this,that,other

但不是

## HD [OPCON]

我怎样才能改变,以便我也beg_ere可以匹配?## HD [OPCON]

this,that,other是由逗号分隔的一系列关键字。一行中可以有任意数量的关键字,包括没有。

awk
  • 1 个回答
  • 41 Views
Martin Hope
Enver
Asked: 2023-02-25 06:07:24 +0800 CST

用awk捕获三个区域

  • 3

我希望能够使用正则表达式匹配文件中的以下行

## FAML [ASMB]

## FAML [ASMB] KYA

## FAML [ASMB] KYA,KYB

然后能够捕获 的值FAML,ASMB以及逗号分隔的关键字的序列KYA,KYB。

用户提供FAML, ASMB, 以及他们想要匹配的任何关键字KYA,KYB等。

我在做

BEGIN {
  kw=".*" ; ebl="[[]" ; ebr="[]]" ; spc="[[:space:]]*"
  pn_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+"
  fm = "%s(%s) %s(%s)%s(%s)%s$"
  beg_ere = sprintf(fm, pn_ere, faml, ebl, asmb, ebr, kw, spc)
}

$0 ~ beg_ere {
  fml = gensub(beg_ere, "\\2", 1, $0)
  asm = gensub(beg_ere, "\\3", 1, $0)
  kyw = gensub(beg_ere, "\\4", 1, $0)
 }

where(%s)用于捕获fml、asm和kyw出现在文件中以匹配faml、asmb和的任何用户输入kw。

##将在以双注释字符, ;;, !!, //,开头的注释部分中对源代码文件执行行匹配@c。

因此用户可以调用

awk -f densel -v faml="HD" -v asmb="OPCON" galex.el

例如,考虑一个 emacs lisp 文件galex.el。

;; HD [TEST]

(defun galex-insert (n)
  "Copy line N at current point.
N is the numeric prefix arg"
  (interactive "p")
  (save-excursion
    (goto-char (point-min))
    (forward-line (1- n))
    (kill-ring-save (line-beginning-position) (line-end-position))))

;; HD [OPCON]

(message "\nGALEX")

;; HD [OPCON] elisp,resource

(message "\nGALEX")

然后正则表达式将匹配行;; HD [OPCON]和;; HD [OPCON] elisp,resource。

如果用户指定

awk -f densel -v faml="HD" -v asmb="OPCON" -v kw="resource"  galex.el

只有以下行会匹配

;; HD [OPCON] elisp,resource
awk
  • 1 个回答
  • 54 Views
Martin Hope
Enver
Asked: 2023-02-25 02:14:36 +0800 CST

包含文字 [ 和 ] 的模式

  • 4

使用以下beg_ere模式,我如何用(asmb)文字[和包围]?

#!/usr/local/bin/awk -f
BEGIN {
  beg_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+(faml) [(asmb)]([[:space:]]*).*$"
}

$0 ~ beg_ere { print "MATCH" }

其中faml和asmb是用户定义的字符串,或者如果不是用户定义的则由 描述"[[:graph:]]+"。

在这种情况下

beg_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+(faml) [([[:graph:]]+)]([[:space:]]*).*$"

使用包含以下行的文件时,我没有打印 MATCH

## HD [opcon]

## HD [opcon] key

## HD [opcon] akey,bkey  

其中可以有任意数量的键,用逗号分隔。

awk
  • 1 个回答
  • 34 Views
Martin Hope
Enver
Asked: 2023-02-24 22:55:14 +0800 CST

在 awk 中匹配 HD [something] 模式

  • 6

这是名为densel

#!/usr/local/bin/awk -f
BEGIN {
beg_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+(HD) [()]([[:space:]]*).*$"
}

$0 ~ beg_ere { print "MATCH" }

使用具有以下行的文件时,我没有打印 MATCH

## HD [opcon]
awk
  • 1 个回答
  • 60 Views

Sidebar

Stats

  • 问题 199037
  • 回答 263511
  • 最佳答案 131755
  • 用户 66345
  • 热门
  • 回答
  • 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