Awk script:
extract_pat_space.awk
содержание:
$0 ~ "^#" pat{ f = 1; hash = 0 }
f { print }
NF == 1 && $1 == "#"{
if (++hash == 2) { f = hash = 0 }
}
Использование (для обоих шаблонов):
$ awk -f extract_pat_space.awk -v pat="List" file > list_of_objects.txt
$ awk -f extract_pat_space.awk -v pat="Reports" file > reports.txt
Результаты:
$ cat list_of_objects.txt
#List of Objects
#
# Headers
# Paths
Files not found /var/xxxxx
Files not found /etc/xxxxx
Files not found /mnt/xxxxx
Files not found /safd/xxxxx
#
$ cat reports.txt
#Reports
#
Error-Number 123
Error Number 12345
#
Обновлено:Для обновленного вопроса попробуйте ниже, который работает только для точного сценария ввода
sed -Ee 's/([0-9]),([0-9]{3})./ \1\2/g;s/ ([0-9]{3})\./ \1/g' <<inputFile>>
Выход :.
$ sed -Ee 's/([0-9]),([0-9]{3})./ \1\2/g;s/ ([0-9]{3})\./ \1/g' temp.txt
asfdassdfasfasfas 171941 23:55:51 016250 9003286 171941 24.64DR 381000
safsdfoskjshfkkdf 18400 23:57:53 019516 9007963 18400 2.94DR 384000
agereafdfbfbgsdgd 116800 23:59:55 012229 9002950 116800 3.54DR 0000
$ head -1 temp.txt
asfdassdfasfasfas 1,719.41 23:55:51 016250 9003286 1,719.41 24.64DR 381000
$ head -1 temp.txt | wc -c
88
$ sed -Ee 's/([0-9]),([0-9]{3})./ \1\2/g;s/ ([0-9]{3})\./ \1/g' | head -1
asfdassdfasfasfas 171941 23:55:51 016250 9003286 171941 24.64DR 381000
$ sed -Ee 's/([0-9]),([0-9]{3})./ \1\2/g;s/ ([0-9]{3})\./ \1/g' temp.txt | head -1 | wc -c
88
(Общее)Вы можете работать с awk, рассматривая каждое значение столбца как поле, а не как целую строку:
awk '{gsub(",",""); $2=$2*100;$6=$6*100; }1' <<inputFile>> | rev | column -t | rev
Выход:
asfdassdfasfasfas 171941 23:55:51 016250 9003286 171941 24.64DR 381000
safsdfoskjshfkkdf 18400 23:57:53 019516 9007963 18400 2.94DR 384000
agereafdfbfbgsdgd 116800 23:59:55 012229 9002950 116800 3.54DR 0000
Старый добрыйawk
Использование полей фиксированной ширины для ввода, обрезка полей $2
и $4
по мере необходимости, а затем их дополнение до исходной ширины
awk 'BEGIN {FIELDWIDTHS = "19 11 29 11 30"} {
gsub(/\.|,/,"",$4); gsub(/\.|,/,"",$2);
printf "%s%11s%s%11s%s\n", $1, $2, $3, $4, $5
}' file1
Это должно быть общим решением, так как удаление символов не зависит от контекста, и не имеет значения, сколько символов удалено, поле всегда будет дополняться до правильной ширины (11)
Гзин
cat file1
asfdassdfasfasfas 1,719.41 23:55:51 016250 9003286 1,719.41 24.64DR 381000
safsdfoskjshfkkdf 184.00 23:57:53 019516 9007963 184.00 2.94DR 384000
agereafdfbfbgsdgd 1,168.00 23:59:55 012229 9002950 1,168.00 3.54DR 0000
Гзут
asfdassdfasfasfas 171941 23:55:51 016250 9003286 171941 24.64DR 381000
safsdfoskjshfkkdf 18400 23:57:53 019516 9007963 18400 2.94DR 384000
agereafdfbfbgsdgd 116800 23:59:55 012229 9002950 116800 3.54DR 0000