awk печатает столбцы, разделенные пробелом

Короткий ответ: двоичные файлы из одной системы не гарантируют корректную работу в другой системе, но они могут работать. Они также могут казаться рабочими, но иметь проблемы.

Более длинный ответ заключается в том, что это зависит от того, как эти двоичные файлы были связаны. Статически связанные двоичные файлы имеют больше шансов работать, чем динамически связанные двоичные файлы. Динамически связанные двоичные файлы будут иметь много зависимостей, которые могут не удовлетворяться другим дистрибутивом.

В вашем конкретном случае лучше всего создать виртуальную машину или контейнер CentOS 7 и создать там двоичные файлы. Если можете, создайте статически связанные двоичные файлы, а затем разверните их в своей ограниченной производственной системе.

1
28.02.2021, 07:15
7 ответов
cat data | awk '{print $1"_"$3$4$5}'

Это выведет то, что вы ищете, надеюсь, это поможет вам задать любые вопросы.

Или вы можете сделать так.

awk '{print $1"_"$3$4$5}' data.dat

for file in /path/to/file/holly*.dat; do awk '{print $1"_"$3$4$5}' $file; done

2
18.03.2021, 22:28

Это должно сработать.

for file in /home/path/*.tmp ; do cat $file |  awk '{print$1,"_",$3$4$5}' | sed 's/ //g' ; done
1
18.03.2021, 22:28

Измените разделитель полей вывода OFSна нулевую (пустую )строку и измените $2на_:

$ awk -v OFS= '{ $2="_" }1' *.dat
20210101_NewYear'sDay
20210102_LaborDay
20210103_IndependenceDay
7
18.03.2021, 22:28

Также с awk, но предположим, что вы хотите получить результат

20210101_New Year's Day
20210102_Labor Day
20210103_Independence Day

Установите регулярное выражение дляFS:одного пробела, за которым следует одна цифра, за которой следует один или несколько пробелов.


awk -v FS=' [[:digit:]] +' -v OFS='_' '{print $1,$NF}' file
20210101_New Year's Day
20210102_Labor Day
20210103_Independence Day

или используя функцию sub()с тем же регулярным выражением:

awk 'sub(/ [[:digit:]] +/,"_") 1' file
20210101_New Year's Day
20210102_Labor Day
20210103_Independence Day
0
18.03.2021, 22:28
awk '{$2="";print $1"_"$(NF-2),$(NF-1)$NF }' p.txt| awk '{gsub(/_[ ]*/,"_",$0);print }'

выход

20210101_New Year'sDay
20210102_LaborDay
20210103_IndependenceDay

Питон

#!/usr/bin/python

    import re
    k=re.compile(r'_\s+')
    m=open('filename','r')
    for i in m:
        z=i.strip().split(' ')
        d="{0}_{1} {2}{3}".format(z[0],z[-3],z[-2],z[-1])
        print re.sub(k,"_",d)

output

20210101_New Year'sDay
20210102_LaborDay
20210103_IndependenceDay
0
18.03.2021, 22:28

Этот оператор awk использует операторы printf стиля C -. Дополнительным преимуществом здесь является то, что у вас больше гибкости в форматировании вывода. Здесь NF — количество полей в текущей строке, задается awk.

awk -F ' ' '{printf("%s_", $1); for (i=3; i<=NF;i++) printf("%s ", $i); print ""}' $file

Пример вывода:

20210101_New Year's Day
20210102_Labor Day
20210103_Independence Day

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

awk '{printf("%s_", $1); for (i=3; i<=NF;i++) printf("%s ", $i); print ""}' $file

0
18.03.2021, 22:28

Если вы можете полагаться на ширину столбцов,

awk '{print $1"_"$3}' FIELDWIDTHS="8 7 *" /home/path/holly*.dat

Если это символ табуляции перед последним столбцом, вы можете настроить количество или использовать его таким образом:

awk '{print substr($1,1,8)"_"$2}' FS=$'\t' /home/path/holly*.dat

и другим способом:

awk '{print substr($1,1,8}"_"$2' FS='[\t ]{2,}' /home/path/holly*.dat

или даже

awk '{print $1"_"$2}' FS=' [0-9]  +' /home/path/holly*.dat
0
18.03.2021, 22:28

Теги

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