клавиша Backspace только перемещает курсор назад.
клавиша Backspace (или удаляют или безотносительно символа в зависимости от конфигурации) удаляет последний печатный символ только, когда эти условия соблюдают:
echo
в Вашем примере Если Вы хотите стереть c в своем примере, необходимо перезаписать его другим символом, например:
echo "abc^H "
Я не знаю, что существует действительно хороший способ восстановить эту информацию, если поля в середине являются пробелом, и Вы позволяете разделителю идти на неуказанное количество символов, как Вы могли когда-либо говорить, что поле, которое Вы заканчиваете тем, что видели, Colour
и нет PlayerName
?
В какой-то момент данные должны быть отформатированы способом, который может быть проанализирован программно, и что-либо еще - просто результат плохой подачи данных. Необходимо переключиться на односимвольный разделитель, если Вы хотите смочь пропустить случайные поля.
Если это - проблема удобочитаемости, можно, конечно, написать сценарий презентации данных, где поля увеличены с пробелом, пока они не находятся под надлежащими столбцами, но выполнение так уничтожает информацию, которая сообщила бы, на какое поле Вы на самом деле смотрите, таким образом, это - односторонний процесс.
awk -v field="Game" -v FIELDWIDTHS="10 12 10 13 25" '
NR == 1 {cmpstr="^" field " *$";
for (i=0;i<6;i++) if ($i ~ cmpstr) { fieldindex=i; next;}; exit 1};
{gsub(" ","",$fieldindex); if ($fieldindex != "") print $fieldindex;}' inputfile
Редактирование 1: Выход с кодом ошибки, не соответствуя столбцу найден.
Редактирование 2: не производите пустые строки.
Вы могли использовать FIELDWIDTHS
, хотя это - a gawk
расширение и не как портативный. Вы могли также назвать поля как в, например:
awk '
BEGIN {
FIELDWIDTHS = "10 9 13 11 32"
team=1; colour=2; game=3; rainfall=4; name=5;
}
NR == 1 {
next
}
/./ {
print $3, $name
} ' fixwdata
Ширины в FIELDWIDTHS
составлен следующим образом:
Team Colour Game Rainfall PlayerName
XYZ Blue Cricket Yes Kapil
# <- 10 -><- 9 -><- 10 -><- 11 -><- NN -> FIELDWIDTHS
# $1 $2 $3 $4 $5 Field numbers
Дополнительно Вы могли использовать, например, substr (). Если первые уникальные имена синхронизаций строчной развертки, где никакое повторение, т.е. нет Name
, TeamName
, Вы могли использовать index()
.
Это выглядит немного хрупким. Если данные являются зафиксированной шириной, Вы могли твердый код это, но некоторые программы также извергают зафиксированную ширину – но также и выравнивают данные согласно ширине данных. Таким образом, Вы могли добраться:
Output1:
FLD1 FLD2
foo bar
Output2:
FLD1 FLD2
foobaz bar
Этот пример не принимает повторения имен на другие имена:
awk '
function get_fld(fld_name)
{
return substr($0, col[fld_name"s"], col[fld_name"w"]);
}
BEGIN {
team=1
colour=2
game=3
rainfall=4
name=5
}
NR == 1 {
col["1s"]=0
col["2s"]=index($0, $2)
col["3s"]=index($0, $3)
col["4s"]=index($0, $4)
col["5s"]=index($0, $5)
col["1w"]=col["2s"] - 1
col["2w"]=col["3s"] - col["2s"]
col["3w"]=col["4s"] - col["3s"]
col["4w"]=col["5s"] - col["4s"]
col["5w"]=22
next
}
/./ {
printf(\
"%-5s {\n"\
"%12s: %s\n"\
"%12s: %s\n"\
"%12s: %s\n"\
"%12s: %s\n"\
"}\n",
get_fld(name),
"Team", get_fld(team),
"Colour", get_fld(colour),
"Game", get_fld(game),
"Rainfall", get_fld(rainfall));
} ' fixwdata
Вход:
Team Colour Game Rainfall PlayerName
ABC Blue Cricket Yes Kapil
DEF Red Cricket Konos
DEF Yellow Go Kripl
DUX Black
Zon Purple Golf No Gim
Zon Purple Golf No Jom
Вывод:
Kapil {
Team: ABC
Colour: Blue
Game: Cricket
Rainfall: Yes
}
Konos {
Team: DEF
Colour: Red
Game: Cricket
Rainfall:
}
Kripl {
Team: DEF
Colour: Yellow
Game: Go
Rainfall:
}
{
Team: DUX
Colour: Black
Game:
Rainfall:
}
Gim {
Team: Zon
Colour: Purple
Game: Golf
Rainfall: No
}
Jom {
Team: Zon
Colour: Purple
Game: Golf
Rainfall: No
}
awk
даже имеет функцию использования просто этого:FIELDWIDTHS
. Вы не можете заполнить вкладками и пробелами хотя (или должны преобразовать вкладки сначала). Если бы информация, на какое поле Вы смотрите, закончилась затем, то Вы даже не могли заполнить к правому столбцу: Как был бы Вы знать что правый столбец (или: дополнение права)? Это просто не работает с обычноеawk
полевой разделительный метод. – Hauke Laging 11.05.2013, 18:21FIELDWIDTHS
реагируйте на поле, которое увеличено для поддержания столбцов после значения строки, это длиннее, чем заголовок? – Bratchley 11.05.2013, 20:20Griffin
подlname
? – Bratchley 11.05.2013, 20:21FIELDWIDTHS
нестандартно (GNU еще раз). – Hauke Laging 11.05.2013, 21:13