awk - 如何在 awk 命令中打印某些输出
问题描述
文件 1
area@wide.com
geo@earth.com
sun@far.com
文件2
area@wide.com:200
moon@mars.com:100
venus@distance.com:0
geo@earth.com:201
sun@far.com:10
文件 3应如下所示:
area@wide.com:200
geo@earth.com:201
sun@far.com:10
我试过了:
awk -F, 'BEGIN{OFS=":"} NR==FNR{a[$1$2]=$3;next}'
解决方案
awk -F: 'NR==FNR{a[$0]; next} $1 in a' file1 file2
-F:
设置:
为字段分隔符NR==FNR{a[$0]; next}
根据完整的行内容构建数组键file1
$1 in a
file2
如果第一个字段是数组中的键,则打印行a
看起来您的文件可能具有 dos 样式的行尾,在这种情况下您可以使用:
awk -F: 'NR==FNR{sub(/\r$/, ""); a[$0]; next} $1 in a' file1 file2
在这里,在将 in 行末尾的回车符file1
用作键之前,它会被删除,因此它将匹配 的第一个字段file2
。此外,输出将是 dos 样式的。
如果行尾有空格、制表符等空白字符,也可能导致问题。在这种情况下,使用
awk -F: 'NR==FNR{sub(/[[:space:]]*$/, ""); a[$0]; next} $1 in a' file1 file2
这将在将其用作键之前删除行尾的额外空格。这也适用于 dos 样式的文件。
推荐阅读
- sql-server - “试图将非 NULL 列的值设置为 NULL。”
- sql-server - 在连接时过滤掉 NULL 值
- sql - 具有列参数的 T_SQL 函数
- google-bigquery - BigQuery 数据仓库设计?
- python - python请求异常 - 不断抛出错误
- jenkins - 无法将 cucumberTestResults 作为构建后操作添加到我的 dsl 文件中
- c# - C# 的 itextsharp:如何使用“PdfPageEventHelper”中的“OnStartPage”事件从 html 内容呈现为 pdf
- postgresql - Flask SQLAlchemy 为 PostgreSQL 中的文本字段插入空值,尽管有文本
- pandas - Python Pandas:仅在使用函数调用满足条件时将外部数据集读入数据帧
- php - php在更改页面后使用会话保持用户登录