首页 > 解决方案 > 使用列数据打印列的 awk 命令

问题描述

cat file1.txt | awk -F '{print $1 "|~|" $2 "|~|" $3}' > file2.txt

我正在使用上面的命令从 file1 中过滤前三列并放入文件中。

但只获取列名而不是列数据。

怎么做?

|~|- 是分隔符。

file1.txt的值为:

 a|~|b|~|c|~|d|~|e
 1|~|2|~|3|~|4|~|5
 11|~|22|~|33|~|44|~|55
 111|~|222|~|333|~|444|~|555

我的加急输出是:

 a|~|b|~|c
 1|~|2|~|3
 11|~|22|~|33
 111|~|222|~|333

标签: awk

解决方案


使用您显示的示例,请尝试以下awk代码。您需要将字段分隔符设置为|~|并从行中删除起始空间,然后打印行。

awk -F'\\|~\\|' -v OFS='|~|' '{sub(/^[[:blank:]]+/,"");print $1,$2,$3}' Input_file

如果您想保留空格(在编辑之前的初始帖子中),请尝试以下操作:

awk -F'\\|~\\|' -v OFS='|~|' '{print $1,$2,$3}' Input_file

注意:与房间里的用户聊天并了解为什么此代码由于使用错误而对用户不起作用gunzip -c file,其输出被保存到用户正在运行awk程序的变量中,因此更正该命令生成正确的文件运行awk良好。将此添加为未来读者的参考。


推荐阅读