как поменяться местами двух полей данных / столбцы в Linux

Чтобы сделать это Ваш путь, который должен был бы быть чем-то как:

POSIXLY_CORRECT=1 awk '
  {
    n = ""; r = $0
    while (match(r, /[[:alpha:]]{3} [[:alpha:]]{3} +[0-9]+ ([0-9]{2}:){2}[0-9]{2} [0-9]{4}/)) {
      c = "date -d\"" substr(r,RSTART,RLENGTH) "\" +%s"
      c | getline b
      close(c)
      n = n substr(r,1,RSTART-1) b
      r =  substr(r,RSTART+RLENGTH)
    }
    print n r
  }'
-1
28.11.2013, 11:17
2 ответа

Вот некоторые:

awk -F": " '/:/{print $2": "$1}' file
sed 's/\(.*\): *\(.*\)/\2: \1/' file
perl -pne 's/(.+?):\s*(.*)/$2: $1/' file
paste  <(cut -f 2 -d ' ' file) <(cut -f 1 -d ' ' file | sed 's/://')
while read a b; do echo "$b: $a"; done < file | sed 's/: *$//'
2
28.01.2020, 05:07

Существует также

perl -ple  '$_=join ": ",reverse split /:\s*/' your_file

и

perl -aF':\s*' -ple '$_=join ": ",reverse @F' your_file
2
28.01.2020, 05:07
  • 1
    Лучше -aF':\s', потому что “Вы не можете использовать литеральный пробел в шаблоне”. – perlrun. –  manatwork 19.11.2013, 18:51

Теги

Похожие вопросы