标签: awk

如何限制与选项 -print0 一起使用的 find 命令的输出

我想限制 find 命令的输出。过去我曾经用于这个 ls 命令,例如:

ls *tgz|head -100|xargs -i mv "{}" ../
Run Code Online (Sandbox Code Playgroud)

但我知道如果文件名包含换行符,结果可能是不可预测的。所以更正确的方法是这样的:

find ... -print0 | xargs -0
Run Code Online (Sandbox Code Playgroud)

但是采用这种方法我无法使用 head 命令限制 find 的输出 - 它显示所有文件名用 ^@ 特殊符号分隔:

 find . -name '*tgz' -print0|head -2|less
Run Code Online (Sandbox Code Playgroud)

file1.tgz^@file2.tgz^@file3.tgz^@file4.tgz^@file5.tgz^@

有没有办法消除这种尴尬?

我试图在 awk 的帮助下解决它:

find . -name 'BATCHED*' -print0|awk 'BEGIN{RS=""}'
Run Code Online (Sandbox Code Playgroud)

但它仍然显示所有或零行。

可以借助awk解决吗?有更好的解决方案吗?

顺便提一句。我发现这个非常有指导意义的参考,但我的问题没有答案。

bash awk find

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

将 awk 与 find -exec 一起使用

我有一个包含 14 个目录的目录结构,其中包含一堆包含三列格式数据的文件(用制表符分隔)。我打算使用 find 和 awk 从每个文件中提取第二列,并使用相同的文件名但在不同的根文件夹下输出它。这是我的目录的草图。

data/all -> AA, AB, AC, AD ...(A* 是包含以 3 列格式存储数据的文件的文件夹,例如 AA100.txt、AA101.txt ...)

我希望修改后的(一列)文件具有相同的名称,但都在一个新的根目录下 data/pos(而不是 data/all/)-> AA、AB、AC、AD ...(再次, 每个包含 A*100.txt, A*101...)

我的尝试是使用 find -exec 并为其提供 awk 命令,但是我在将文件输出到正确的位置时遇到了问题。

当在数据/全部/

find * -type f -exec awk '{print$2}' '{}' > ../pos/'{}' \;

但是 {} 作为输入文件的通配符在输出文件时似乎不起作用?

我究竟做错了什么?(顺便说一句,我在 ubuntu 服务器上)

unix awk find

5
推荐指数
2
解决办法
2万
查看次数

在 linux 上使用命令行作为 bash 别名时出错

我想将以下命令行序列保存为 bash 别名:

grep  `date '+%d/%b/%Y'` access.logs  | egrep 2765330645ae47d292c9ceac725d744e.py |awk '{print $1, $4, $5, $7, $8, $9, $10}' | sort |uniq -c -w15 |sort -n
Run Code Online (Sandbox Code Playgroud)

它在命令行中运行良好,但当我尝试将其设置为别名时失败。我尝试将以下内容添加到 .bash_profile:

alias downloads="grep  `date '+%d/%b/%Y'` access.logs  | egrep 2765330645ae47d292c9ceac725d744e.py |awk '{print $1, $4, $5, $7, $8, $9, $10}' | sort |uniq -c -w15 |sort -n"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

-bash-3.2$ downloads
awk: {print , , , , , , 0}
awk:        ^ syntax error
awk: {print , , , , , , 0}
awk:          ^ syntax …
Run Code Online (Sandbox Code Playgroud)

linux bash alias awk command-line

4
推荐指数
2
解决办法
2227
查看次数

如何对文本文件中的特定字段进行零填充?

我有一个这样的文件:

123123213,456,be
124243233,4346,ytr
123123123,436535,uytr
324234324,322,yt
234324323,32,tyutr
Run Code Online (Sandbox Code Playgroud)

我想对中间字段进行零填充以给出结果:

123123213,00000456,be
124243233,00004346,ytr
123123123,00436535,uytr
324234324,00000322,yt
234324323,00000032,tyutr
Run Code Online (Sandbox Code Playgroud)

我如何制作一个可以做到这一点的脚本?

我见过这样的例子

awk '{ $6=sprintf("%06s", $6); print $0}'
Run Code Online (Sandbox Code Playgroud)

但我并不真正理解它,因此无法让它工作。

unix awk sed

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

给定搜索模式以在 AFTER 或 BEFORE 之后插入,如何使用 awk 在文件中间插入一行

我想在文件中间插入一些文本。要插入的文本将在特定行之后,例如“ <begin>”。我不知道行号,也不知道要插入的文本行数。我只知道在读取“ <begin>”的行之后,我需要插入另一个文件的内容。

我只是不知道如何使用 awk 来做这样的事情。

谢谢 :-)

awk

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

在 awk 脚本中读取 shell 命令的输出

我有一个包含 IP 地址列表和其他信息的文本文件。

我正在使用 awk 脚本来处理此列表并输出各种计算。我想dig -x从 awk 脚本内部调用并使用返回的值。

我试过了

hostname = system("dig +short -x" ip_address);
Run Code Online (Sandbox Code Playgroud)

但发生的事情是——

  1. 调用 dig 将一行打印到 shell

  2. 主机名保持为空

shell awk

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

Unix one-liner 引用一行中的所有单词

我有一个文本文件,其中包含由单词组成的行(用空格分隔),我想在所有单词周围加上引号。

例如:

Lorem ipsum dolor sit amet
consectetur 
adipisicing elitsed do  

eiusmod tempor 
incididunt ut
  labore et dolore magna 
aliqua
Run Code Online (Sandbox Code Playgroud)

应该变成:

"Lorem" "ipsum" "dolor" "sit" "amet"
"consectetur"
"adipisicing" "elitsed" "do"

"eiusmod" "tempor"
"incididunt" "ut"
  "labore" "et" "dolore" "magna"
"aliqua"
Run Code Online (Sandbox Code Playgroud)

unix awk sed

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

将字符串从 xargs 插入另一个字符串

假设我有一些输出一堆字符串的命令。此命令的输出可能类似于:

...
foo
bar
blargh
...
Run Code Online (Sandbox Code Playgroud)

说我有一些固定的字符串

myString$Blah
Run Code Online (Sandbox Code Playgroud)

我想在命令的输出中插入 $ 所在的每个字符串,这样我最终会得到一个如下所示的文件:

...
myStringfooBlah
myStringbarBlah
myStringblarghBlah
...
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最简单方法是什么?(awk 和 sed 首选)

unix awk sed

4
推荐指数
2
解决办法
8779
查看次数

使用grep显示字符串中的第二个字符?

我有一个总是 3 个字符的字符串......第一个和最后一个总是相同的。

例子:

???

有没有一种简单的方法只显示中间的那个?(这是唯一改变的)

grep awk command-line

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

Grep 整个函数体

假设我知道someFile.php包含someFunction(). 我将如何在标准输出中显示整个函数体?如果我知道主体有 10 行长,那么我会使用cat someFile.php | grep -A 10 "function someFunction"[1] 但实际上该函数可以是任意长度。

我想sed我可以使用 Vimesque 命令,例如/function someFunction<Return>/{<Return>%[2],但我不知道如何格式化它。理想情况下,函数之前的 PHPDoc 将与函数一起输出。

任何帮助或指向适当的精美手册的链接将不胜感激。谢谢!

[1] 我知道这cat是多余的,但我发现这种格式更容易阅读。

[2] 找到函数定义,到左大括号,到右大括号

vim grep awk sed

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

标签 统计

awk ×10

sed ×4

unix ×4

bash ×2

command-line ×2

find ×2

grep ×2

alias ×1

linux ×1

shell ×1

vim ×1