Git-bash UNIX: переключать столбцы / поля с помощью cut?

echo() {
  command echo -n "$@"
}

Использование команды здесь означает запрос echo (которая здесь встроена) вместо функции, которая в противном случае имела бы приоритет.

И поскольку здесь echo также оказывается встроенным (не ищется в $ PATH Кстати, поскольку встроенные команды имеют приоритет над командами файловой системы), вы также можете сделать:

echo() {
  builtin echo -n "$@"
}

Последний подход предпочтительнее в zsh , где команда echo будет запускать вместо этого / bin / echo (за исключением эмуляции sh ).

Между оболочками есть некоторые тонкие различия, но обычно порядок приоритета следующий:

  1. специальные встроенные команды
  2. функции
  3. встроенные команды
  4. команды в $ PATH (и порядок зависит от в порядке в $ PATH и в хеш-таблице , управляемой встроенной хеш-функцией )

Принимая во внимание, что псевдонимы и ключевые слова в синтаксисе оболочки ( для , если ...), если они не указаны, рассматриваются перед ними.

Порядок 1 и 2 обратный в некоторых оболочках, таких как bash или zsh . bash не позволяет определять функции с тем же именем, что и специальная встроенная функция при вызове как sh .

0
08.06.2018, 02:12
2 ответа

El delimitador predeterminado para cutes un carácter de tabulación -si desea cutespacio -datos separados, deberá especificarlo usando el argumento -d.

Su archivo de entrada parece usar múltiples espacios que lo hacen más difícil:

paste <(cut -d' ' -f5 file.txt) <(cut -d' ' -f3 file.txt)
1   10
2   11
3   12
4   13
5   14

o puede reemplazar los espacios por tabulaciones (eliminando las repeticiones)-tenga en cuenta que los campos se convierten en -f3y -f2porque su archivo tiene espacios en blanco iniciales:

paste <(tr -s ' ' '\t' < file.txt | cut -f3) <(tr -s ' ' '\t' < file.txt | cut -f2)

En este caso, sería más sencillo usar awk, p.

awk '{print $2,$1}' file.txt

o

awk '{print $2,$1}' OFS='\t' file.txt

si desea una tabulación -salida separada (como la obtendría depaste)ej.

$ awk '{print $2,$1}' OFS='\t' file.txt
1   10
2   11
3   12
4   13
5   14
2
28.01.2020, 02:31

Así que me di cuenta de lo que quería hacer con lo siguiente:

cut -d' ' -f1 file.txt > f1.txt

Para cortar y agregar la primera columna a un nuevo archivo f1.txt

cut -d' ' -f4 file.txt > f2.txt

Para cortar y agregar la segunda columna a un nuevo archivo f2.txt

paste f2.txt f1.txt > file.txt

Y finalmente para sobrescribir el archivo original.txt con columnas cambiadas.

0
28.01.2020, 02:31

Теги

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