标签: awk

如何在awk中用空格或制表符分隔字段

在玩的时候awk我来执行:

ls -la >> a.txt ; awk {'print $5  $1'} a.txt ;
Run Code Online (Sandbox Code Playgroud)

这给出了如下输出:

53277-rw-------
52347-rw-------
Run Code Online (Sandbox Code Playgroud)

我怎样才能在这两个输出朋友之间留一个空格?

command-line awk text-processing

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

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

如何逐行合并文件?

猫文件1

foo
ice
two
Run Code Online (Sandbox Code Playgroud)

猫文件2

bar
cream
hundred
Run Code Online (Sandbox Code Playgroud)

期望的输出:

foobar
icecream
twohundred
Run Code Online (Sandbox Code Playgroud)

在我的场景中,file1 和 file2 将始终具有相同数量的行,以防事情变得更容易。

bash perl sed awk text-processing

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

如何在 bash 脚本中使用 awk 处理多行记录?

example.txt 在下面

Restaurant: McDonalds 
City: Miami
State: Florida
Address: 123 Biscayne Blvd
Phone: 911

Restaurant: 5 guys
City: Atlanta
State: Georgia
Address: 123 Peachtree Rd
Phone: 911

Restaurant: KFC
City: NYC
State: NY
Address: 123 Madison Square
Phone: 911
Run Code Online (Sandbox Code Playgroud)

我使用 bash 脚本,假设我想从上面的文件中按名称搜索餐厅。询问用户输入餐厅名称,它应该打印有关该餐厅的信息(5 行)。

awk '/McDonalds/> /KFC/' example.txt
Run Code Online (Sandbox Code Playgroud)

我知道上面的代码行将打印与模式“麦当劳”和“肯德基”匹配的整行,但这只会打印文本文件中的第一行,而不是有关该餐厅的其余信息。我如何告诉它仅从用户输入的餐厅名称中打印所有信息(5 行)?

scripts awk

17
推荐指数
1
解决办法
6万
查看次数

两个大文件的区别

我有“test1.csv”,它包含

200,400,600,800
100,300,500,700
50,25,125,310
Run Code Online (Sandbox Code Playgroud)

和 test2.csv ,它包含

100,4,2,1,7
200,400,600,800
21,22,23,24,25
50,25,125,310
50,25,700,5
Run Code Online (Sandbox Code Playgroud)

现在

diff test2.csv test1.csv > result.csv
Run Code Online (Sandbox Code Playgroud)

不同于

diff test1.csv test2.csv > result.csv
Run Code Online (Sandbox Code Playgroud)

我不知道哪个是正确的顺序,但我想要别的东西,上面的两个命令都会输出类似的东西

2 > 100,4,2,1,7
   3 2,3c3,5
   4 < 100,300,500,700
   5 < 50,25,125,310
   6 \ No newline at end of file
   7 ---
   8 > 21,22,23,24,25
   9 > 50,25,125,310
Run Code Online (Sandbox Code Playgroud)

我只想输出差异,因此 results.csv 应该是这样的

100,300,500,700
100,4,2,1,7
21,22,23,24,25
50,25,700,5
Run Code Online (Sandbox Code Playgroud)

我试过了diff -qdiff -s但他们没有成功。顺序无关紧要,重要的是我只想看到差异,没有 > 也没有 < 也没有空格。

grep -FvF 在较小的文件上而不是在大文件上做了技巧

第一个文件包含超过 500 万行,第二个文件包含 1300。

所以 results.csv 应该导致 …

grep diff sed awk

15
推荐指数
2
解决办法
6865
查看次数

如何用文件中的单个单词替换多行(就地替换)?

我的filename文件内容如下(例如):

My block of line starts from here 
START
First line
second line
third line
END
and end to here for example.
Run Code Online (Sandbox Code Playgroud)

我想,以取代之间的行块START,并END只用一个词,例如用SINGLEWORD。像下面这样:

My block of line starts from here 
SINGLEWORD
and end to here for example.
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令找到我的行块:

grep -Pzo "START(.|\n)*END" filename
Run Code Online (Sandbox Code Playgroud)

运行上述命令的结果将是这样的:

START
First line
second line
third line
END
Run Code Online (Sandbox Code Playgroud)

然后我使用此命令将所有行合并为一行:

LAST_RESULT | sed -e :a -e '/$/N; s/\n/ /; ta'
Run Code Online (Sandbox Code Playgroud)

然后我会得到这个结果:

START First line second line third line END
Run Code Online (Sandbox Code Playgroud)

通过我的最后一个命令, …

command-line perl sed awk text-processing

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

如何删除以某些字符串开头的行

有没有办法删除以某些字符串开头的行。

我有这个 youtube-dl 代码

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E
Run Code Online (Sandbox Code Playgroud)

它的结果是这样的

[youtube:playlist] PL1C815DB73EC2678E: Downloading webpage
[download] Downloading playlist: Less than 1 minute
[youtube:playlist] playlist Less than 1 minute: Collected 4 video ids (downloading 4 of them)
[download] Downloading video 1 of 4
[youtube] KNLwsqzFfNg: Downloading webpage
[youtube] KNLwsqzFfNg: Extracting video information
[youtube] KNLwsqzFfNg: Downloading DASH manifest
[download] Destination: _1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.m4a

[download]   0.4% of 231.51KiB at  6.10KiB/s ETA 00:30
[download]   1.1% of …
Run Code Online (Sandbox Code Playgroud)

command-line grep sed awk youtube-dl

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

使用 grep/sed/awk 从字符串中提取单词

我有一个字符串

00:28:04 /usr/lib/jvm/jre/bin/java -DJDBC_CONNECTION_STRING= -Dspring.profiles.active=qa -XX:MaxPermSize=256
Run Code Online (Sandbox Code Playgroud)

并要提取的词qa后面-Dspring.profiles.active

我将字符串保存在一个文件 text.txt 中,只是为了演示它。

当我做

grep -r -o "spring.profiles.active=" text.txt
Run Code Online (Sandbox Code Playgroud)

结果是 spring.profiles.active=

这个词并不总是qa,它可能是proddev

我想做的是找到这个词spring.profiles.active然后=提取那个词之后。

我想为此编写 shell 脚本,因为我使用这个来配置服务器上的其他项目。

这可能吗,如果可以,我该怎么做。

command-line bash grep sed awk

12
推荐指数
1
解决办法
10万
查看次数

grep 返回匹配前后的第 N 行和第 M 行

我知道使用 grep 我可以使用字段-A-B从匹配中提取上一行和下一行。

但是,他们根据指定的行数在匹配之间拉入所有行。

grep -r -i -B 5 -A 5 "match" 
Run Code Online (Sandbox Code Playgroud)

我想只收到5在比赛之前线和5线的比赛,除了匹配的行之后,并没有得到之间的界线。

有没有办法做到这一点grep

command-line grep awk

12
推荐指数
5
解决办法
8322
查看次数

awk - 如何打印文件中前 n 行的字符数?

我有一个命令:

$ awk '{ print length($0); }' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

它打印passwd文件中每一行的字符数:

52
52
61
48
81
58
etc.
Run Code Online (Sandbox Code Playgroud)

如何仅打印前 n 行的字符数?

例如 - 对于前 3 行,它会给出如下内容:

52
52
61
Run Code Online (Sandbox Code Playgroud)

command-line awk text-processing

10
推荐指数
3
解决办法
7975
查看次数

标签 统计

awk ×10

command-line ×7

sed ×5

grep ×4

text-processing ×4

bash ×2

perl ×2

diff ×1

scripts ×1

youtube-dl ×1