【发布时间】:2018-04-22 05:21:20
【问题描述】:
使用awk 处理输入时,有时我想编辑其中一个字段,而不涉及其他任何内容。考虑一下:
$ ls -l | awk 1
total 88
-rw-r--r-- 1 jack jack 8 Jun 19 2013 qunit-1.11.0.css
-rw-r--r-- 1 jack jack 56908 Jun 19 2013 qunit-1.11.0.js
-rw-r--r-- 1 jack jack 4306 Dec 29 09:16 test1.html
-rw-r--r-- 1 jack jack 5476 Dec 7 08:09 test1.js
如果我不编辑任何字段($1、$2、...),所有内容都会保持原样。但如果假设我只想保留第一个字段的前 3 个字符:
$ ls -l | awk '{$1 = substr($1, 1, 3) } 1'
tot 88
-rw 1 jack jack 8 Jun 19 2013 qunit-1.11.0.css
-rw 1 jack jack 56908 Jun 19 2013 qunit-1.11.0.js
-rw 1 jack jack 4306 Dec 29 09:16 test1.html
-rw 1 jack jack 5476 Dec 7 08:09 test1.js
所有字段之间的原始空白被替换为一个简单的空格。
有没有办法保留字段之间的原始空白?
更新
在此示例中,编辑前 4 个字段相对容易。但是,如果我只想保留 $5 的第一个字母以获得此输出:
-rw-r--r-- 1 jack jack 8 J 19 2013 qunit-1.11.0.css
-rw-r--r-- 1 jack jack 56908 J 19 2013 qunit-1.11.0.js
-rw-r--r-- 1 jack jack 4306 D 29 09:16 test1.html
-rw-r--r-- 1 jack jack 5476 D 7 08:09 test1.js
【问题讨论】:
标签: awk