Могу ли я изменить порядок выходных полей из команды Linux cut? [дубликат]

этот вопрос уже есть ответ здесь:

Я использую команду 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