Как заменить расположение исправления в каждой строке файла

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
#
0
24.04.2020, 00:13
2 ответа

Обновлено:Для обновленного вопроса попробуйте ниже, который работает только для точного сценария ввода

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    
0
19.03.2021, 02:26

Старый добрый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
1
19.03.2021, 02:26

Теги

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