При обработке ввода с помощью 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
Исходное пробел между всеми полями заменяется простым пространством.
Есть ли способ сохранить исходные пробелы между полями?
UPDATE
В этом примере относительно легко редактировать первые 4 поля. Но что, если я хочу сохранить только 1-ю букву $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