linux - 同时执行 awk 和 sed 命令

标签 linux bash awk sed

我有 2 个文件,英语文件(源文件)和意大利语文件(目标文件)。它们都具有相同的行数。我跑 awk 'NF<3'删除我的意大利语文件中超过 2 个单词的所有字符串,但同时我想删除从英语文件中的意大利语文件中删除的特定源字符串(我想我可以处理行号) .当然,我必须执行 sed命令在源字符串的行号上(因为两个文件中的字符串不同),但我不知道如何在使用 awk 时同时执行此操作从意大利语文件中删除这些字符串,因为当我启动命令时,我丢失了文件中的等效行号。

例子

EN
1 Santa Claus
2 Pigs don't fly
3 The son of the father
4 Elf

IT
1 Babbo Natale
2 I maiali non volano
3 Il figlio del padre
4 Elfo

I run awk on IT file
OUTPUT FILE
IT
1 Babbo Natale
4 Elfo

awk 删除的行在 IT 文件中也需要从 EN 文件中删除(我不能在 eng 文件上再次使用 awk,因为 eng 文件的字数与 IT 文件不同,它只是行号有效)

THE OUTPUT EN FILE MUST BE
1 Santa Claus
2 Elf

有什么建议吗? 如有不明白请追问...

最佳答案

作为文件:

$ cat it.dat 
Babbo Natale
I maiali non volano
Il figlio del padre
Elfo

$ cat en.dat 
Santa Claus
Pigs don't fly
The son of the father
Elf

这个awk:

awk 'NR==FNR{if(NF>3){a[NR]}else{a[NR]=1;print > "filtered_it.dat"}}
     NR!=FNR && a[FNR]{print > "filtered_en.dat"}' it.dat en.dat 

结果

$ cat filtered_id.dat 
Babbo Natale
Elfo
$ cat filtered_en.dat 
Santa Claus
Elf

关于linux - 同时执行 awk 和 sed 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34470792/

相关文章:

c - 为什么sigprocmask用于阻止SIGCHLD在以下代码中传递

linux - 从一个 Docker 容器连接到另一个 Docker 容器的端口

android - 远程()的实现

bash - 将带有空格的字符串作为参数传递给 Bash 函数

linux - 从输出中提取文本并转换为 CSV

bash - 使用 IF 语句时 AWK 语法错误

linux - 如何从内核空间读取/写入 linux/proc 文件?

linux - sed - 批处理 'key=value' 替换

linux - 我如何知道 bash 脚本是否正在使用 nohup 运行?

perl - 如果 csv 文件可以在引用的字符串中用逗号引用,那么将 csv 文件转换为 tsv 文件的平台独立方法是什么?