小编and*_*rec的帖子

使用 awk 格式化输出中的列

我有以下数据集名称 a.txt 有 9003 行:

571 43544000424023503222
572 43504442020202303202
573 40340440323043033204
574 40303445340343505242
...       ...

16078 50200000023322000202
16079 33233500320452300252
16080 04200330233532050502
16081 30200400323435434202
Run Code Online (Sandbox Code Playgroud)

我想获得一个数据文件,第一列中的值右对齐,第二列在所有行的同一字段中开始,第一列和第二列之间有一个空格,这样:

  571 435440004240235032225
  572 435044420202023032022
  573 403404403230430332040
  574 403034453403435052423
...       ...

16078 502000000233220002021
16079 332335003204523002521
16080 042003302335320505023
16081 302004003234354342024
Run Code Online (Sandbox Code Playgroud)

我正在尝试这个代码:

awk '{printf "%-5s \n", $1,$2}' a.txt |  # -5 indicate the maximum number of characters in the first column
expand > b.txt
Run Code Online (Sandbox Code Playgroud)

第二列在正确的位置开始,但是第一列在输出中左对齐,如下所示:

571   43544000424023503222
572   43504442020202303202
573   40340440323043033204
574   40303445340343505242
...       ...

16078 50200000023322000202
16079 33233500320452300252 …
Run Code Online (Sandbox Code Playgroud)

awk text-formatting

2
推荐指数
1
解决办法
2018
查看次数

在特定行中用 awk for 循环替换值

我想将第一、第三、第五行等所有字段中的值 3 和 4 分别替换为 0 和 1,直到以下数据集结束:

 2 4 3 0
 2 4 3 0
 3 0 4 4
 3 0 4 4
 4 2 4 3
 4 2 4 3
 2 3 4 2
 2 3 4 2
Run Code Online (Sandbox Code Playgroud)

所以,想要的结果是:

 2 1 0 0
 2 4 3 0
 0 0 1 1
 3 0 4 4
 1 2 1 0
 4 2 4 3
 2 0 1 2
 2 3 4 2
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码来做到这一点:

awk '{for (i = 1; i …
Run Code Online (Sandbox Code Playgroud)

sed awk shell-script

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

标签 统计

awk ×2

sed ×1

shell-script ×1

text-formatting ×1