awk 命令打印列数据

Avi*_*tor 0 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
Run Code Online (Sandbox Code Playgroud)

我的加急输出是:

 a|~|b|~|c
 1|~|2|~|3
 11|~|22|~|33
 111|~|222|~|333
Run Code Online (Sandbox Code Playgroud)

Rav*_*h13 6

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

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

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

awk -F'\\|~\\|' -v OFS='|~|' '{print $1,$2,$3}' Input_file
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,你明白了!我讨厌 `"|~|"` 那些 - 认为它作为字段分隔符的人 - 应该被枪杀...... (2认同)