Могу ли я изменить порядок выходных полей из команды Linux cut? [дубликат]
этот вопрос уже есть ответ здесь:
- переставить столбцы с помощью cut 5 ответов
Я использую команду cut в командной строке и, похоже, не могу получить вывод, который мне нравится. Ты хоть представляешь, почему я получаю это? Я что-то делаю не так?
Это нормальный выход, и я хотел бы вывод в другом порядке:
[root@upbvm500 root]# ls -al IDS_DIR/a | tr -s " "
-rw-r--r-- 1 root root 0 Jan 1 17:18 IDS_DIR/a
[root@upbvm500 root]#
[root@upbvm500 root]# ls -al IDS_DIR/a | tr -s " " | cut -d" " -f5,6,7,8,3,4,1
-rw-r--r-- root root 0 Jan 1 17:18
но как вы можете видеть, это не работает, как ожидалось. Есть идеи, почему они поменялись местами?
3 ответов
С man cut
:
выбранный ввод записывается в том же порядке, что и чтение, и записывается ровно один раз.
использовать awk '{print ,,,,,,}'
вместо cut
.
cut
не изменяет порядок вывода. Он просто собирает список столбцов для печати, а затем распечатывает их по мере их поступления.
используйте другой инструмент, например Awk, для изменения порядка выходных столбцов.
однако, в этом случае patricular, попробуйте с stat
или find
вместо ls
. Как правило, не рекомендуется пытаться анализировать вывод из ls
. См.http://mywiki.wooledge.org/ParsingLs
как упоминали другие, не разбирайте ls. Если вам нужна информация о файле, используйте stat
stat -c "%s %y %U %G %A %n" filename
вам может потребоваться дополнительная работа, чтобы получить метку времени в формате, как вы хотите.
$ ls -l data
-rw-r--r-- 1 glennj glennj 13 2013-01-01 11:19 data
$ LC_TIME=POSIX ls -l data
-rw-r--r-- 1 glennj glennj 13 Jan 1 11:19 data
$ stat -c "%s %y %U %G %A %n" data
13 2013-01-01 11:19:53.670015242 -0500 glennj glennj -rw-r--r-- data
$ stat -c "%s %Y %U %G %A %n" data | awk '{ = strftime("%b %e %H:%M", )} 1'
13 Jan 1 11:19 glennj glennj -rw-r--r-- data